用C语言编写服务器端与客户端TCP通信代码,实现以下功能: (1) 客户端(PC机)发送实验组所有同学学号与姓名给服务器端(实验箱),服务器端返回收到的数据给客户端;
时间: 2023-12-30 17:02:11 浏览: 24
以下是用C语言编写的服务器端和客户端TCP通信代码,实现上述功能:
服务器端代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PORT 8888
int main()
{
int sockfd, newsockfd, clilen;
struct sockaddr_in serv_addr, cli_addr;
char buffer[256];
// 创建socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
// 绑定地址
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR on binding");
exit(1);
}
// 监听连接
listen(sockfd, 5);
clilen = sizeof(cli_addr);
while (1) {
// 接受连接
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0) {
perror("ERROR on accept");
exit(1);
}
// 读取客户端发送的数据
bzero(buffer, 256);
read(newsockfd, buffer, 255);
printf("Received data: %s\n", buffer);
// 发送数据给客户端
write(newsockfd, buffer, strlen(buffer));
close(newsockfd);
}
close(sockfd);
return 0;
}
```
客户端代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#define PORT 8888
int main()
{
int sockfd, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
printf("Enter student numbers and names: ");
fgets(buffer, 255, stdin);
// 创建socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
// 获取服务器地址
server = gethostbyname("localhost");
if (server == NULL) {
fprintf(stderr, "ERROR, no such host\n");
exit(1);
}
// 设置服务器地址
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(PORT);
// 连接服务器
if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR connecting");
exit(1);
}
// 发送数据给服务器
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}
// 读取服务器返回的数据
bzero(buffer, 256);
n = read(sockfd, buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("Received data: %s\n", buffer);
close(sockfd);
return 0;
}
```
使用方法:
1. 在终端中编译服务器端代码:`gcc server.c -o server`
2. 在终端中启动服务器:`./server`
3. 在另一个终端中编译客户端代码:`gcc client.c -o client`
4. 在另一个终端中启动客户端:`./client`
5. 在客户端中输入学生信息,按Enter键发送数据给服务器
6. 服务器会返回收到的数据给客户端,客户端会输出收到的数据