用C语言编程实现TCP客户端与TCP服务器T同时互相可以收和发
时间: 2024-10-11 11:17:07 浏览: 5
在C语言中,我们可以使用`socket()`、`connect()`、`bind()`、`listen()`, `accept()`, `send()`, 和 `recv()`等系统调用来创建TCP客户端和服务器程序。这里是一个简单的例子,展示了如何让两者实现实时通信:
**服务器端(server.c):**
```c
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 12345
int main(int argc, char *argv[]) {
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(client_addr);
// 创建套接字并绑定地址
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
perror("Failed to create socket");
return 1;
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY; // 对应任意IP地址
server_addr.sin_port = htons(PORT); // 高位字节存放协议族,低位字节存放端口号
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Failed to bind");
return 1;
}
// 监听连接
listen(server_socket, 5); // 可接受5个连接
printf("Server listening on %d\n", PORT);
while (1) {
// 接受新连接
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_len);
if (client_socket == -1) {
perror("Accept failed");
continue;
}
// 管理每个客户端连接
printf("Accepted connection from %s:%d\n",
inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
char message[100];
send(client_socket, "Hello from Server", strlen("Hello from Server"), 0);
recv(client_socket, message, sizeof(message), 0);
printf("Received: %s\n", message);
close(client_socket);
}
close(server_socket);
return 0;
}
```
**客户端(client.c):**
```c
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#define SERVER_IP "127.0.0.1" // 根据实际情况替换为你服务器的IP
#define SERVER_PORT 12345
int main(int argc, char *argv[]) {
int client_socket;
struct sockaddr_in server_addr;
socklen_t addr_len = sizeof(server_addr);
// 创建套接字
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket == -1) {
perror("Failed to create socket");
return 1;
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(SERVER_PORT);
// 连接到服务器
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Connect failed");
return 1;
}
// 发送消息
const char* message = "Hello from Client";
send(client_socket, message, strlen(message), 0);
printf("Sent: %s\n", message);
// 接收响应
char response[100];
recv(client_socket, response, sizeof(response), 0);
printf("Received: %s\n", response);
close(client_socket);
return 0;
}
```
这两个程序需要分别编译并运行。客户端连接到服务器后,可以相互发送和接收信息。
**相关问题--:**
1. 如何在实际项目中管理多个客户端连接?
2. 客户端和服务端都需要处理哪些异常情况?
3. TCP连接何时会断开?