写一段 “TCP通信服务端”的C语言代码
时间: 2023-09-10 20:04:56 浏览: 91
TCP服务端代码
### 回答1:
以下是一个简单的TCP通信服务端的C语言代码:
```
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int server_socket;
struct sockaddr_in server_address;
char message[1024];
// 创建套接字
server_socket = socket(AF_INET, SOCK_STREAM, 0);
// 设置套接字地址信息
memset(&server_address, 0, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9000);
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定套接字
bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
// 监听套接字
listen(server_socket, 5);
// 接受客户端请求
int client_socket = accept(server_socket, NULL, NULL);
// 接收客户端的消息
recv(client_socket, message, sizeof(message), 0);
// 输出客户端的消息
printf("客户端发送的消息是: %s\n", message);
// 向客户端发送消息
strcpy(message, "服务端已接收到你的消息");
send(client_socket, message, sizeof(message), 0);
// 关闭套接字
close(client_socket);
close(server_socket);
return 0;
}
```
这是一个非常简单的例子,仅供参考。实际的TCP通信服务端需要更多的错误处理、资源释放等。
### 回答2:
以下是一个简单的TCP通信服务端的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
const char *hello = "Hello from server";
// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置套接字选项,允许多个连接使用同一个端口
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);
}
// 监听套接字,最多允许10个客户端连接
if (listen(server_fd, 10) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 接受客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 读取客户端发送的消息
read(new_socket, buffer, BUFFER_SIZE);
printf("Client: %s\n", buffer);
// 向客户端发送消息
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent\n");
return 0;
}
```
该代码实现了一个TCP通信服务端,首先创建一个套接字并设置套接字选项,然后绑定服务器地址和端口。之后监听套接字,等待客户端连接,当客户端连接时,通过`accept`函数接受连接,并读取客户端发送的消息。向客户端发送消息时,使用`send`函数。这个示例中,向客户端发送了"Hello from server"这个消息。最后关闭套接字并结束程序。
注意,此代码只是一个简单的示例,实际情况中需要做更多的错误处理和完善其它功能。
### 回答3:
下面是一个简单的TCP通信服务端的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main()
{
int server_fd;
struct sockaddr_in server_address, client_address;
int client_socket;
int address_length = sizeof(client_address);
char buffer[BUFFER_SIZE] = {0};
// 创建TCP套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("套接字创建失败");
exit(EXIT_FAILURE);
}
// 设置服务器地址和端口
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(PORT);
// 绑定套接字到服务器地址和端口
if (bind(server_fd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0)
{
perror("套接字绑定失败");
exit(EXIT_FAILURE);
}
// 监听连接请求
if (listen(server_fd, 3) < 0)
{
perror("监听失败");
exit(EXIT_FAILURE);
}
printf("等待客户端连接...\n");
// 接受客户端连接请求
if ((client_socket = accept(server_fd, (struct sockaddr *)&client_address, (socklen_t *)&address_length)) < 0)
{
perror("接受连接失败");
exit(EXIT_FAILURE);
}
printf("客户端已连接\n");
while (1)
{
memset(buffer, 0, BUFFER_SIZE);
// 从客户端接收数据
if (read(client_socket, buffer, BUFFER_SIZE) < 0)
{
perror("接收数据失败");
exit(EXIT_FAILURE);
}
printf("来自客户端的消息: %s\n", buffer);
// 发送响应给客户端
if (write(client_socket, "服务器已收到消息", strlen("服务器已收到消息")) < 0)
{
perror("发送响应失败");
exit(EXIT_FAILURE);
}
}
return 0;
}
```
这段代码创建了一个TCP套接字并设置服务器的地址和端口。然后绑定套接字到服务器地址和端口,并开始监听连接请求。接着,服务器等待客户端的连接请求,一旦有连接请求到来,就接受连接,与客户端建立起通信。接下来的循环中,服务器接收来自客户端的消息,并将其打印出来,然后发送响应给客户端。服务器会一直接收和发送消息,直到程序被终止。
阅读全文