用c语言实现一个客户端与服务器的互通小程序。 1)基本功能:能够互相传文字(文件、键盘输入或就是固定文字传送)。 2) 附加功能(可获得加分):有界面;在获取文件之前能够先得到文件列表;支持IPv6。
时间: 2023-06-20 18:10:33 浏览: 83
好的,下面是一个简单的客户端与服务器的互通小程序的C语言实现。
首先,我们需要定义一些常量和头文件:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SERVER_ADDR "127.0.0.1" // 服务器地址
#define SERVER_PORT 8888 // 服务器端口号
#define BUFFER_SIZE 1024 // 缓冲区大小
```
接下来,我们实现客户端的代码:
```c
int main() {
// 创建套接字
int client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 设置服务器地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
server_addr.sin_port = htons(SERVER_PORT);
// 连接服务器
if (connect(client_socket, (struct sockaddr *) &server_addr, sizeof(server_addr)) == -1) {
perror("connect");
exit(EXIT_FAILURE);
}
// 接收用户输入并发送数据
char buffer[BUFFER_SIZE];
while (1) {
printf("请输入要发送的消息:");
fgets(buffer, BUFFER_SIZE, stdin);
buffer[strlen(buffer) - 1] = '\0'; // 去掉换行符
// 发送数据
if (send(client_socket, buffer, strlen(buffer), 0) == -1) {
perror("send");
exit(EXIT_FAILURE);
}
// 接收数据
int length = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (length == -1) {
perror("recv");
exit(EXIT_FAILURE);
}
buffer[length] = '\0';
printf("收到来自服务器的消息:%s\n", buffer);
}
// 关闭套接字
close(client_socket);
return 0;
}
```
客户端的代码比较简单,主要包括创建套接字、连接服务器、发送和接收数据等步骤。
接下来,我们实现服务器的代码:
```c
int main() {
// 创建套接字
int server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 设置服务器地址
struct sockaddr_in server_addr;
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(SERVER_PORT);
// 绑定套接字
if (bind(server_socket, (struct sockaddr *) &server_addr, sizeof(server_addr)) == -1) {
perror("bind");
exit(EXIT_FAILURE);
}
// 监听套接字
if (listen(server_socket, SOMAXCONN) == -1) {
perror("listen");
exit(EXIT_FAILURE);
}
printf("服务器已启动,等待客户端连接...\n");
// 接受客户端连接
struct sockaddr_in client_addr;
socklen_t client_addr_size = sizeof(client_addr);
int client_socket = accept(server_socket, (struct sockaddr *) &client_addr, &client_addr_size);
if (client_socket == -1) {
perror("accept");
exit(EXIT_FAILURE);
}
printf("客户端已连接:%s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
// 接收数据并发送回复
char buffer[BUFFER_SIZE];
while (1) {
int length = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (length == -1) {
perror("recv");
exit(EXIT_FAILURE);
} else if (length == 0) {
printf("客户端已断开连接。\n");
break;
}
buffer[length] = '\0';
printf("收到来自客户端的消息:%s\n", buffer);
// 发送回复
if (send(client_socket, buffer, strlen(buffer), 0) == -1) {
perror("send");
exit(EXIT_FAILURE);
}
}
// 关闭套接字
close(client_socket);
close(server_socket);
return 0;
}
```
服务器的代码比客户端略微复杂一些,主要包括创建套接字、绑定、监听、接受客户端连接、接收和发送数据等步骤。
以上就是一个简单的客户端与服务器的互通小程序的C语言实现。如果需要实现附加功能,可以在此基础上进行扩展。