1.完成TCP_CLIENT和TCP_severs的代码 思考,怎么样通过进程read和write函数来实现双方通话(你一句 我一句)
时间: 2024-04-10 17:28:24 浏览: 23
下面是一个简单的TCP客户端(TCP_CLIENT)和TCP服务器(TCP_SERVER)的代码示例,以及通过进程的read和write函数实现双方通话的思路:
**TCP_CLIENT.c:**
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int socket_fd;
struct sockaddr_in server_addr;
char buffer[1024];
// 创建套接字
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1) {
perror("套接字创建失败");
exit(EXIT_FAILURE);
}
// 设置服务器地址
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("无效的服务器地址");
exit(EXIT_FAILURE);
}
// 连接服务器
if (connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("连接服务器失败");
exit(EXIT_FAILURE);
}
// 进行通话
while (1) {
printf("请输入要发送的消息:");
fgets(buffer, 1024, stdin);
// 发送消息给服务器
write(socket_fd, buffer, strlen(buffer));
// 接收服务器的响应
read(socket_fd, buffer, 1024);
printf("服务器回复:%s", buffer);
}
// 关闭套接字
close(socket_fd);
return 0;
}
```
**TCP_SERVER.c:**
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *message = "已收到消息";
// 创建套接字
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd == -1) {
perror("套接字创建失败");
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)) == -1) {
perror("绑定失败");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 3) == -1) {
perror("监听失败");
exit(EXIT_FAILURE);
}
// 接受连接
new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen);
if (new_socket == -1) {
perror("接受连接失败");
exit(EXIT_FAILURE);
}
// 进行通话
while (1) {
// 接收客户端消息
read(new_socket, buffer, 1024);
printf("客户端消息:%s", buffer);
// 发送响应给客户端
send(new_socket, message, strlen(message), 0);
}
// 关闭套接字
close(new_socket);
close(server_fd);
return 0;
}
```
在这个示例中,TCP_CLIENT和TCP_SERVER分别表示TCP客户端和TCP服务器。客户端通过套接字连接到服务器,并使用read函数接收服务器的响应,使用write函数向服务器发送消息。服务器通过套接字接受客户端的连接,并使用read函数接收客户端的消息,使用send函数向客户端发送响应。
要实现双方通话,可以在客户端和服务器中添加适当的逻辑来交替进行读取和写入操作。例如,在客户端中,用户输入要发送的消息后,通过write函数将消息发送给服务器,并等待服务器的响应。然后,通过read函数接收服务器的响应并打印出来。在服务器端,通过read函数接收客户端的消息并打印出来,然后通过send函数发送响应给客户端。
这样,客户端和服务器就可以通过进程的read和write函数来实现双方通话。