使用C语言创建一个tcp通信服务,等待连接后进行数据交互
时间: 2024-01-02 16:02:24 浏览: 226
C语言实现TCP连接
好的,以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define BUF_SIZE 1024
int main(int argc, char *argv[]) {
int serv_sock, clnt_sock;
struct sockaddr_in serv_addr, clnt_addr;
socklen_t clnt_addr_size;
char buf[BUF_SIZE];
if (argc != 2) {
printf("Usage: %s <port>\n", argv[0]);
exit(1);
}
// 创建 socket
serv_sock = socket(AF_INET, SOCK_STREAM, 0);
if (serv_sock == -1) {
perror("socket");
exit(1);
}
// 初始化地址结构体
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; // 使用 IPv4 地址
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 任意地址
serv_addr.sin_port = htons(atoi(argv[1])); // 端口号
// 绑定 socket 和地址
if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {
perror("bind");
exit(1);
}
// 监听 socket
if (listen(serv_sock, 5) == -1) {
perror("listen");
exit(1);
}
// 接受客户端连接
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if (clnt_sock == -1) {
perror("accept");
exit(1);
}
// 读取客户端发送的数据
while (1) {
memset(buf, 0, BUF_SIZE);
ssize_t size = read(clnt_sock, buf, BUF_SIZE);
if (size == -1) {
perror("read");
exit(1);
} else if (size == 0) {
break;
}
printf("Received message: %s", buf);
// 将数据原样发送回客户端
ssize_t sent_size = write(clnt_sock, buf, size);
if (sent_size == -1) {
perror("write");
exit(1);
}
}
// 关闭 socket
close(clnt_sock);
close(serv_sock);
return 0;
}
```
你可以通过以下步骤编译并运行该程序:
1. 将代码保存到一个名为 `server.c` 的文件中;
2. 在终端中进入代码所在的目录;
3. 执行 `gcc -o server server.c` 编译代码;
4. 执行 `./server <port>` 启动程序,其中 `<port>` 为监听的端口号,可以自行指定。
阅读全文