C语言编写一个客户端和服务器端程序,客户端连接到服务器端后,请求一个文档,然后显示结果。
时间: 2024-02-22 11:00:35 浏览: 20
好的,这是一个比较典型的客户端和服务器端的网络编程实现。我可以提供一个简单的代码示例,供你参考。
服务器端程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <fcntl.h>
#define PORT 8080
#define MAXLINE 1024
int main() {
int sockfd, new_sockfd;
char buffer[MAXLINE];
struct sockaddr_in servaddr, cliaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
listen(sockfd, 5);
printf("Server running on port %d\n", PORT);
while(1) {
socklen_t len = sizeof(cliaddr);
new_sockfd = accept(sockfd, (struct sockaddr*)&cliaddr, &len);
int pid = fork();
if(pid == 0) {
close(sockfd);
memset(buffer, 0, sizeof(buffer));
read(new_sockfd, buffer, sizeof(buffer));
printf("Request received: %s\n", buffer);
int fd = open(buffer, O_RDONLY);
if(fd == -1) {
write(new_sockfd, "File not found", strlen("File not found"));
close(new_sockfd);
exit(0);
}
memset(buffer, 0, sizeof(buffer));
int n = read(fd, buffer, sizeof(buffer));
write(new_sockfd, buffer, n);
close(fd);
close(new_sockfd);
exit(0);
} else {
close(new_sockfd);
}
}
return 0;
}
```
客户端程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#define PORT 8080
#define MAXLINE 1024
int main() {
int sockfd;
char buffer[MAXLINE];
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("Enter the file name: ");
memset(buffer, 0, sizeof(buffer));
scanf("%s", buffer);
write(sockfd, buffer, strlen(buffer));
memset(buffer, 0, sizeof(buffer));
read(sockfd, buffer, sizeof(buffer));
printf("Response: %s\n", buffer);
close(sockfd);
return 0;
}
```
这个例子中,客户端程序连接到服务器端,请求一个文件名,并发送给服务器端。服务器端接收到请求后,打开文件,读取文件内容,然后将文件内容返回给客户端。客户端接收到响应后,输出文件内容。
请注意,以上代码仅供参考,实际使用时还需要进行错误处理等优化。