利用C语言完成 一个服务器能同时与多个客户端通信的Socket 客户端与服务器程序
时间: 2023-10-01 17:05:40 浏览: 160
好的,下面我将为您介绍如何使用 C 语言完成一个服务器能同时与多个客户端通信的 Socket 客户端与服务器程序。
首先,我们需要创建一个服务器程序。在服务器程序中,我们需要进行以下步骤:
1. 创建 Socket:使用 socket() 函数创建一个 Socket。
```
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
```
2. 绑定 Socket:使用 bind() 函数将 Socket 绑定到一个 IP 地址和端口号上。
```
struct sockaddr_in serverAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
```
3. 监听 Socket:使用 listen() 函数监听来自客户端的连接请求。
```
listen(serverSocket, 5);
```
4. 接受连接:使用 accept() 函数接受客户端连接请求,并创建一个新的线程来处理该连接。
```
while (1) {
struct sockaddr_in clientAddr;
socklen_t clientAddrLen = sizeof(clientAddr);
int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);
pthread_t tid;
pthread_create(&tid, NULL, handler, (void*)&clientSocket);
}
```
在 handler 函数中,我们可以使用 recv() 和 send() 函数进行收发通信。
接下来,我们需要创建一个客户端程序。在客户端程序中,我们需要进行以下步骤:
1. 创建 Socket:使用 socket() 函数创建一个 Socket。
```
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
```
2. 连接服务器:使用 connect() 函数连接服务器。
```
struct sockaddr_in serverAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
inet_pton(AF_INET, SERVER_IP, &serverAddr.sin_addr);
connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
```
3. 发送数据:使用 send() 函数向服务器发送数据。
```
char* data = "Hello, World!";
send(clientSocket, data, strlen(data), 0);
```
4. 接收数据:使用 recv() 函数从服务器接收数据。
```
char buffer[MAXLINE];
int n = recv(clientSocket, buffer, MAXLINE, 0);
buffer[n] = '\0';
printf("Received: %s\n", buffer);
```
综上所述,利用 C 语言完成一个服务器能同时与多个客户端通信的 Socket 客户端与服务器程序,需要掌握 Socket 编程、多线程编程等知识。