编写两个程序实现客户端与服务端的通信,clinet.c为客户端,server.c为服务器端。服务器端能够读取客户端发送的信息。
时间: 2024-02-28 16:53:44 浏览: 22
以下是client.c的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
#define MAX_MSG_LEN 1024
int main(int argc, char *argv[]) {
int sock_fd;
struct sockaddr_in server_addr;
char msg[MAX_MSG_LEN] = {0};
// 创建socket
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
perror("inet_pton failed");
exit(EXIT_FAILURE);
}
// 连接服务器
if (connect(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("connect failed");
exit(EXIT_FAILURE);
}
// 与服务器通信
while (1) {
printf("Enter message: ");
fgets(msg, MAX_MSG_LEN, stdin);
if (send(sock_fd, msg, strlen(msg), 0) < 0) {
perror("send failed");
exit(EXIT_FAILURE);
}
}
close(sock_fd);
return 0;
}
```
以下是server.c的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
#define MAX_MSG_LEN 1024
int main(int argc, char *argv[]) {
int listen_fd, conn_fd;
struct sockaddr_in server_addr, client_addr;
char msg[MAX_MSG_LEN] = {0};
socklen_t client_len;
// 创建socket
if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
// 绑定地址
if (bind(listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听
if (listen(listen_fd, 5) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 等待客户端连接
printf("Waiting for connection...\n");
client_len = sizeof(client_addr);
if ((conn_fd = accept(listen_fd, (struct sockaddr *)&client_addr, &client_len)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
printf("Client connected successfully!\n");
// 读取客户端发送的信息
while (1) {
memset(msg, 0, MAX_MSG_LEN);
if (recv(conn_fd, msg, MAX_MSG_LEN, 0) < 0) {
perror("recv failed");
exit(EXIT_FAILURE);
}
printf("Received message: %s", msg);
}
close(conn_fd);
close(listen_fd);
return 0;
}
```
使用方法:
1. 在终端中编译client.c和server.c:
```bash
gcc -o client client.c
gcc -o server server.c
```
2. 在一个终端窗口中运行server:
```bash
./server
```
3. 在另一个终端窗口中运行client:
```bash
./client
```
4. 在client终端中输入消息,可以在server终端中看到收到的消息。