linux c 写一个tcp服务端代码,监听13400端口
时间: 2024-01-21 11:19:25 浏览: 43
以下是一个简单的TCP服务器代码示例,监听在端口13400:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 13400
#define MAX_CLIENTS 10
int main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
// 创建 TCP 套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置地址重用
int opt = 1;
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
&opt, sizeof(opt))) {
perror("setsockopt failed");
exit(EXIT_FAILURE);
}
// 绑定地址和端口
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听端口
if (listen(server_fd, MAX_CLIENTS) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("Waiting for connections...\n");
// 等待连接
while (1) {
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
(socklen_t *)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
printf("New connection established.\n");
// 读取客户端发来的消息
valread = read(new_socket, buffer, 1024);
printf("Received message: %s\n", buffer);
// 发送响应消息给客户端
char *response = "Server response.";
send(new_socket, response, strlen(response), 0);
// 关闭连接
close(new_socket);
}
return 0;
}
```
需要注意的是,该代码只能同时处理最多10个客户端的连接请求,如果需要处理更多客户端,需要修改 `MAX_CLIENTS` 常量。同时,该代码只能处理客户端发来的一次消息,如果需要处理连续的消息交互,需要在循环中添加相应的逻辑。