当前位置: 首页 > wzjs >正文

网站短链接生成创建一个网站多少钱

网站短链接生成,创建一个网站多少钱,丰台网站建设报价,购物商城html网站代码写一个服务器和两个客户端 运行服务器和2个客户端,实现聊天功能 客户端1 和 客户端2 进行聊天 客户端1将聊天数据发送给服务器 服务器将聊天数据转发给客户端2 要求: 服务器使用 select 模型实现 客户端1使用 poll 模型实现 客户端2使用 多线程实现…

写一个服务器和两个客户端

运行服务器和2个客户端,实现聊天功能

客户端1 和 客户端2 进行聊天

客户端1将聊天数据发送给服务器

服务器将聊天数据转发给客户端2

要求: 服务器使用 select 模型实现 客户端1使用 poll 模型实现 客户端2使用 多线程实现

服务器:

1 
2 #include "head.h"
3 
4 #define PORT 12345
5 #define MAX_CLIENTS 10
6 #define BUFFER_SIZE 1024
7 
8 void handle_client_message(int client_sock, int *clients, int num_clients) {
9     char buffer[BUFFER_SIZE];
0     int bytes_received = recv(client_sock, buffer, sizeof(buffer), 0);
1     if (bytes_received <= 0) {
2         close(client_sock);
3         for (int i = 0; i < num_clients; i++) {
4             if (clients[i] == client_sock) {
5                 clients[i] = clients[num_clients - 1];
6                 break;
7             }
8         }
9         return;
0     }
1     buffer[bytes_received] = '\0';
2     printf("Received message: %s\n", buffer);
3 
4     // 广播消息给所有其他客户端
5     for (int i = 0; i < num_clients; i++) {
6         if (clients[i] != client_sock) {
7             send(clients[i], buffer, strlen(buffer), 0);
8         }
9     }
0 }
1 
2 void server() {
3     int server_sock, client_sock, max_fd;
4     struct sockaddr_in server_addr, client_addr;
5     socklen_t client_len = sizeof(client_addr);
6     fd_set read_fds, temp_fds;
7     int clients[MAX_CLIENTS];
8     int num_clients = 0;
9 
0     // 创建服务器socket
1     server_sock = socket(AF_INET, SOCK_STREAM, 0);
2     if (server_sock < 0) {
3         perror("Socket creation failed");
4         exit(EXIT_FAILURE);
5     }
6 
7     // 绑定服务器地址
8     memset(&server_addr, 0, sizeof(server_addr));
9     server_addr.sin_family = AF_INET;
0     server_addr.sin_addr.s_addr = INADDR_ANY;
1     server_addr.sin_port = htons(PORT);
2 
3     if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
4         perror("Binding failed");
5         exit(EXIT_FAILURE);
6     }
7 
8     // 监听客户端连接
9     listen(server_sock, 5);
0     FD_ZERO(&read_fds);
1     FD_SET(server_sock, &read_fds);
2     max_fd = server_sock;
3 
4     printf("Server listening on port %d...\n", PORT);
5 
6     while (1) {
7         temp_fds = read_fds;
8 
9         // 使用select等待活动的socket
0         if (select(max_fd + 1, &temp_fds, NULL, NULL, NULL) < 0) {
1             perror("Select error");
2             exit(EXIT_FAILURE);
3         }
4 
5         // 检查所有客户端连接
6         for (int i = 0; i <= max_fd; i++) {
7             if (FD_ISSET(i, &temp_fds)) {
8                 if (i == server_sock) {
9                     // 有新的客户端连接
0                     client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_len);
1                     if (client_sock < 0) {
2                         perror("Accept failed");
3                         continue;
4                     }
5                     printf("New connection: %d\n", client_sock);
6 
7                     FD_SET(client_sock, &read_fds);
8                     clients[num_clients++] = client_sock;
9                     if (client_sock > max_fd) {
0                         max_fd = client_sock;
1                     }
2                 } else {
3                     // 处理现有客户端的消息
4                     handle_client_message(i, clients, num_clients);
5                 }
6             }
7         }
8     }
9                                                                                                                                   
0     close(server_sock);
1 }
2 
3 int main() {
4     server();
5     return 0;
6 }
7 

客户端1:


#include "head.h"#define PORT 12345
#define BUFFER_SIZE 1024void client1() {int sock;struct sockaddr_in server_addr;struct pollfd fds[2];char buffer[BUFFER_SIZE];// 创建客户端socketsock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 设置服务器地址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(PORT);// 连接到服务器if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {perror("Connection failed");exit(EXIT_FAILURE);}printf("Connected to server. Type your messages.\n");// 设置poll结构fds[0].fd = sock; // 服务器socketfds[0].events = POLLIN;fds[1].fd = STDIN_FILENO; // 标准输入fds[1].events = POLLIN;while (1) {// 使用poll模型int ret = poll(fds, 2, -1);if (ret < 0) {perror("Poll failed");exit(EXIT_FAILURE);}if (fds[0].revents & POLLIN) {// 服务器发送消息int n = recv(sock, buffer, sizeof(buffer), 0);if (n <= 0) {printf("Server disconnected\n");break;}buffer[n] = '\0';printf("Server: %s\n", buffer);}if (fds[1].revents & POLLIN) {// 用户输入消息if (fgets(buffer, sizeof(buffer), stdin) != NULL) {send(sock, buffer, strlen(buffer), 0);}}}close(sock);
}int main() {                                                                                                      client1();return 0;
}

客户端2:

#include "head.h"#define PORT 12345
#define BUFFER_SIZE 1024void *receive_messages(void *socket_desc) {int sock = *(int *)socket_desc;char buffer[BUFFER_SIZE];while (1) {int n = recv(sock, buffer, sizeof(buffer), 0);if (n <= 0) {printf("Server disconnected\n");break;}buffer[n] = '\0';printf("Server: %s\n", buffer);}return NULL;
}void client2() {int sock;struct sockaddr_in server_addr;pthread_t thread_id;char buffer[BUFFER_SIZE];// 创建客户端socketsock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 设置服务器地址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(PORT);// 连接到服务器if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {perror("Connection failed");exit(EXIT_FAILURE);}printf("Connected to server. Type your messages.\n");// 创建接收消息线程if (pthread_create(&thread_id, NULL, receive_messages, (void *)&sock) < 0) {perror("Could not create thread");exit(EXIT_FAILURE);}// 发送消息while (1) {fgets(buffer, sizeof(buffer), stdin);send(sock, buffer, strlen(buffer), 0);}close(sock);
}int main() {client2();return 0;}

结果:

http://www.dtcms.com/wzjs/823698.html

相关文章:

  • 普陀网站建设哪家便宜甘肃建设体网站
  • wordpress影视站小公司网站如何做
  • wordpress能仿站吗wordpress+响应速度慢
  • 古城网站建设软件开发工具排行
  • 汕尾英文网站建设织梦网站采集如何做
  • 网站集约化建设什么意思最好用的手机编程软件
  • seo网站整站优化网站中英切换实例
  • 网站怎样建设友情链接韩国情侣网站模板
  • 宽屏网站做多少合适青岛网站建设搭建
  • 管理系统网站开发如何设置网站图标
  • 常州哪里做网站破解版手游app平台
  • 1元网站建设精品网站制作必应网站管理员工具
  • 一级a做爰片免播放器网站17网站一起做网店怎么下单
  • 连云港建设部网站好一点的网站是怎么做的
  • 云南建设网站首页自己买域名建设网站
  • 云主机添加网站wordpress qnap nas外网
  • 怀化火车站网站专科学什么专业好就业前景好
  • 深圳市官网网站建设报价上海建筑公司
  • 衡水公司建网站费用win2003服务器网站管理工具
  • 最简单的网站模板下载wordpress友链页面
  • 微网站需wordpress教程视频 下载
  • 网站宽度1200px凡客网上商城
  • 养老院网站开发背景东莞网站建设求职简历
  • 南通市区有哪几家做网站的个人执业资格注册查询
  • 园区做网站的好处百度app下载官方免费最新版
  • 网站收录做关键词排名django网站开发源码
  • 特色食品网站建设策划书c# 手机版网站开发
  • 如何用nat123做网站苏州现在能去吗
  • 吉林3厅官齐聚任免大会宁波网站建设网页设计与制作教程西北工业大学出版社
  • 郑州微信小程序开发公司排名厦门seo优化推广