编写程序:linux下的网络通信客户端和服务器端两个程序,是的客户端和服务器端之间能够相互通信,程序的功能至少包括即时聊天和文件传送
时间: 2024-02-18 14:02:43 浏览: 36
好的,我可以给你提供一个简单的示例程序,用于演示如何在Linux下编写网络通信客户端和服务器端程序,实现即时聊天和文件传输功能。
下面是服务端程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[])
{
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
char buffer[BUFFER_SIZE];
// 创建socket
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1)
{
printf("Error: Failed to create socket.\n");
return -1;
}
// 初始化地址结构
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(8888);
// 绑定地址结构到socket
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
printf("Error: Failed to bind socket.\n");
return -1;
}
// 监听socket
if (listen(server_socket, 5) == -1)
{
printf("Error: Failed to listen socket.\n");
return -1;
}
printf("Server started, listening on port 8888...\n");
// 循环接受客户端连接
while (1)
{
socklen_t client_addr_len = sizeof(client_addr);
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_socket == -1)
{
printf("Error: Failed to accept client.\n");
continue;
}
printf("Client connected: %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
// 循环接收和发送消息
while (1)
{
// 接收客户端消息
int recv_len = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (recv_len <= 0)
{
printf("Client disconnected.\n");
break;
}
// 打印客户端发送的消息
buffer[recv_len] = '\0';
printf("Received message from client: %s\n", buffer);
// 发送消息给客户端
int send_len = send(client_socket, buffer, strlen(buffer), 0);
if (send_len == -1)
{
printf("Error: Failed to send message.\n");
break;
}
}
// 关闭客户端socket
close(client_socket);
}
// 关闭服务端socket
close(server_socket);
return 0;
}
```
下面是客户端程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[])
{
int client_socket;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
// 创建socket
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket == -1)
{
printf("Error: Failed to create socket.\n");
return -1;
}
// 初始化地址结构
memset(&server_addr, 0, sizeof(server_addr));
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_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
printf("Error: Failed to connect server.\n");
return -1;
}
printf("Connected to server.\n");
// 循环发送和接收消息
while (1)
{
printf("Enter message: ");
fgets(buffer, BUFFER_SIZE, stdin);
// 发送消息给服务器
int send_len = send(client_socket, buffer, strlen(buffer), 0);
if (send_len == -1)
{
printf("Error: Failed to send message.\n");
break;
}
// 接收服务器消息
int recv_len = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (recv_len <= 0)
{
printf("Server disconnected.\n");
break;
}
// 打印服务器发送的消息
buffer[recv_len] = '\0';
printf("Received message from server: %s\n", buffer);
}
// 关闭客户端socket
close(client_socket);
return 0;
}
```
这个示例程序只是一个简单的演示,你可以根据自己的需求和业务场景进行扩展和优化。例如,你可以使用多线程或多进程来处理并发请求,使用加密算法来保护通信安全,使用文件传输协议来实现文件传输等功能。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)