用C语言编程实现TCP客户端与TCP服务器T同时互相可以接收和发送
时间: 2024-10-11 12:17:23 浏览: 8
在C语言中,要实现TCP客户端与服务器的双向通信,我们可以使用标准库中的socket API以及相关的网络编程函数,如`accept()`, `connect()`, `send()`, 和 `recv()`。这里是一个简单的示例,说明了如何创建一个TCP服务器监听连接,并处理来自客户端的消息。
首先,我们来构建一个TCP服务器:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 12345
void handle_client(int client_socket) {
char buffer[1024];
while (1) {
// 接收数据
int bytes_received = recv(client_socket, buffer, sizeof(buffer), 0);
if (bytes_received <= 0) {
break; // 如果接收到错误或关闭,退出循环
}
buffer[bytes_received] = '\0'; // 结束字符串
printf("Received from client: %s\n", buffer);
// 发送响应
char response[] = "Server received your message!";
send(client_socket, response, strlen(response), 0);
}
close(client_socket);
}
int main() {
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
listen(server_socket, 5); // 每次最多接受5个连接请求
while (1) {
int client_socket = accept(server_socket, NULL, NULL);
if (client_socket == -1) {
perror("Error accepting client");
continue;
}
printf("Accepted connection from client.\n");
handle_client(client_socket);
}
close(server_socket);
return 0;
}
```
接下来,我们构建TCP客户端:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 12345
void connect_and_send(const char* message) {
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr);
if (connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) != 0) {
perror("Error connecting to server");
exit(1);
}
send(client_socket, message, strlen(message), 0);
char reply[1024];
recv(client_socket, reply, sizeof(reply), 0);
printf("Server's response: %s\n", reply);
close(client_socket);
}
int main() {
const char* message = "Hello, Server!";
connect_and_send(message);
return 0;
}
```
在运行时,先启动服务器,然后启动客户端,它们就可以通过指定的IP地址和端口进行双向通信了。