给你一设计网络编程socket程序,含客户端、服务器端两个程序。使用C/S模式tcp协议通信,当用户从客户端输入“金”,传送到服务器端,变成“银”,送回客户端;如果从客户端输入“退出”,传送到服务器端,服务器端程序退出,不向客户端送回任何信息;上述2种情况之外的其它情况,从客户端输入的容经服务器后均原样送回客户端。
时间: 2023-12-11 13:04:14 浏览: 113
好的,下面是客户端和服务器端的代码实现(使用C语言):
服务器端:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main() {
// 创建socket
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd == -1) {
perror("socket error");
exit(EXIT_FAILURE);
}
// 绑定地址和端口
struct sockaddr_in server_addr = {0};
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8888);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("bind error");
exit(EXIT_FAILURE);
}
// 监听连接请求
if (listen(server_fd, 5) == -1) {
perror("listen error");
exit(EXIT_FAILURE);
}
while (1) {
// 接受连接请求
struct sockaddr_in client_addr = {0};
socklen_t client_addrlen = sizeof(client_addr);
int client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addrlen);
if (client_fd == -1) {
perror("accept error");
exit(EXIT_FAILURE);
}
// 接收数据
char buf[1024] = {0};
ssize_t recv_len = recv(client_fd, buf, sizeof(buf), 0);
if (recv_len == -1) {
perror("recv error");
exit(EXIT_FAILURE);
}
// 处理数据
if (strcmp(buf, "金") == 0) {
strcpy(buf, "银");
} else if (strcmp(buf, "退出") == 0) {
close(client_fd);
break;
}
// 发送数据
ssize_t send_len = send(client_fd, buf, strlen(buf), 0);
if (send_len == -1) {
perror("send error");
exit(EXIT_FAILURE);
}
close(client_fd);
}
close(server_fd);
return 0;
}
```
客户端:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main() {
// 创建socket
int client_fd = socket(AF_INET, SOCK_STREAM, 0);
if (client_fd == -1) {
perror("socket error");
exit(EXIT_FAILURE);
}
// 连接服务器
struct sockaddr_in server_addr = {0};
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(8888);
if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("connect error");
exit(EXIT_FAILURE);
}
// 发送数据
char buf[1024] = {0};
printf("请输入要发送的数据:");
scanf("%s", buf);
ssize_t send_len = send(client_fd, buf, strlen(buf), 0);
if (send_len == -1) {
perror("send error");
exit(EXIT_FAILURE);
}
// 接收数据
ssize_t recv_len = recv(client_fd, buf, sizeof(buf), 0);
if (recv_len == -1) {
perror("recv error");
exit(EXIT_FAILURE);
}
buf[recv_len] = '\0';
printf("收到的数据:%s\n", buf);
close(client_fd);
return 0;
}
```
通过编译运行上述代码,客户端输入“金”或“退出”即可测试程序功能,客户端将会收到相应的数据。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)