用c语言写一个 tcp echo server
时间: 2024-05-01 15:16:02 浏览: 11
好的,以下是用 C 语言编写 TCP Echo 服务器的简单示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAX_BUFFER_SIZE 1024
#define DEFAULT_PORT 8080
int main(int argc, char *argv[])
{
int listen_fd, conn_fd;
struct sockaddr_in serv_addr, client_addr;
socklen_t client_addr_len;
// 创建 TCP 套接字
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if (listen_fd < 0) {
perror("Error creating socket");
exit(EXIT_FAILURE);
}
// 初始化服务器地址和端口
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(DEFAULT_PORT);
// 绑定服务器地址和端口
if (bind(listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Error binding");
exit(EXIT_FAILURE);
}
// 监听连接请求
if (listen(listen_fd, 10) < 0) {
perror("Error listening");
exit(EXIT_FAILURE);
}
printf("Server listening on port %d...\n", DEFAULT_PORT);
while (1) {
// 接受连接请求
client_addr_len = sizeof(client_addr);
conn_fd = accept(listen_fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (conn_fd < 0) {
perror("Error accepting");
continue;
}
printf("Connection from %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
// 接收客户端数据并回显
char buffer[MAX_BUFFER_SIZE];
int len;
while ((len = recv(conn_fd, buffer, MAX_BUFFER_SIZE, 0)) > 0) {
send(conn_fd, buffer, len, 0);
printf("%s", buffer); // 输出日志
}
// 关闭连接
close(conn_fd);
}
return 0;
}
```
这个程序会在默认端口 8080 上监听连接请求,并接受接收到的任何数据并回显。你可以利用 telnet 或任何网络工具来测试此服务器。