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

网站怎么做移动图片潍坊网站建设推广报价

网站怎么做移动图片,潍坊网站建设推广报价,网站502错误什么原因,wordpress 读写分离写一个服务器和客户端 运行服务器和2个客户端,实现聊天功能 客户端1和客户端2进行聊天,客户端1将聊天数据发送给服务器,服务器将聊天数据转发给客户端2 要求: 服务器使用 select 模型实现 ,客户端1使用 poll 模型实现…

写一个服务器和客户端

运行服务器和2个客户端,实现聊天功能 客户端1和客户端2进行聊天,客户端1将聊天数据发送给服务器,服务器将聊天数据转发给客户端2

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

服务器:

#include <head.h>
// 将client存入数组arr中的最后一个位置上,存完之后,arr数组的长度记得自增
void insert_client(int arr[], int client, int *len) {arr[*len] = client;(*len)++;
}// 将client从数组arr中移除,移除后记得数组长度-1
void remove_client(int arr[], int client, int *len) {int i;for (i = 0; i < *len; i++) {if (arr[i] == client) {break;}}if (i == *len) {return;}for (; i < (*len - 1); i++) {arr[i] = arr[i + 1];}(*len)--;
}int main(int argc, const char *argv[]) {if (argc < 2) {printf("请输入端口号\n");return 1;}int port = atoi(argv[1]);// 创建服务器套接字int server = socket(AF_INET, SOCK_STREAM, 0);// 为服务器准备ip和portstruct sockaddr_in addr = {0};addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr("0.0.0.0");if (bind(server, (struct sockaddr *)&addr, sizeof(addr)) == -1) {perror("bind");return 1;}listen(server, 50);int client_arr[64] = {0}; // 用来存放所有客户端套接字的数组int arr_len = 0;         // 记录数组的长度fd_set readfds;         // 创建一个select的监视列表// 初始化,只有2个描述符可以初始化,1个是server服务器套接字,1个是标准输入流 0FD_ZERO(&readfds);FD_SET(server, &readfds);    // 将服务器套接字放入到监视列表中FD_SET(STDIN_FILENO, &readfds); // 将标准输入流描述符放入到监视列表中while (1) {fd_set temp = readfds;select(1024, &temp, 0, 0, 0);// select是一个阻塞型函数,一旦接触阻塞,就说明有任意个描述符激活了,激活的描述符会写入temp里面// 判断一下激活列表temp里面的描述符到底是哪些if (FD_ISSET(STDIN_FILENO, &temp)) {char buf[1024] = {0};scanf("%s", buf);printf("键盘输入数据:%s\n", buf);}if (FD_ISSET(server, &temp)) {int client = accept(server, 0, 0);printf("有新客户端连接\n");// 将新连接的客户端加入到监视列表 readfds里面去 以及 数组 client_arr里面去FD_SET(client, &readfds);insert_client(client_arr, client, &arr_len);}// 判断一下各种各样的客户端是否被激活,也就是是否有在temp 里面for (int i = 0; i < arr_len; i++) {int client = client_arr[i];if (FD_ISSET(client, &temp)) {char pack[1024] = {0};int size = 0;int res = read(client, &size, 4);if (res == 0) {printf("从客户端断开连接\n");// 从监视列表和客户端数组中移除客户端套接字FD_CLR(client, &readfds);remove_client(client_arr, client, &arr_len);close(client); // 关闭相关的客户端break;}read(client, (char *)&pack + 4, size - 4);// 转发数据给其他客户端for (int j = 0; j < arr_len; j++) {if (client_arr[j] != client) {write(client_arr[j], &size, 4);write(client_arr[j], pack, size);}}}}}return 0;
}

客户端1:

#include <head.h>
// 将client存入数组arr中的最后一个位置上,存完之后,arr数组的长度记得自增
void insert_client(struct pollfd *arr, struct pollfd client, int *len) {arr[*len] = client;(*len)++;
}// 将client从数组arr中移除,移除后记得数组长度-1
void remove_client(struct pollfd *arr, int client, int *len) {int i;for (i = 0; i < *len; i++) {if (arr[i].fd == client) {break;}}if (i == *len) {return;}for (; i < (*len - 1); i++) {arr[i] = arr[i + 1];}(*len)--;
}int main(int argc, const char *argv[]) {if (argc < 2) {printf("请输入端口号\n");return 1;}int port = atoi(argv[2]);// 创建客户端套接字int client = socket(AF_INET, SOCK_STREAM, 0);// 准备 ip 和 portstruct sockaddr_in addr = {0};addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr("192.168.126.235");if (connect(client, (struct sockaddr *)&addr, sizeof(addr)) == -1) {perror("connect");return 1;}struct pollfd list[10];int list_len = 0;struct pollfd client_fd = {client, POLLIN, 0};insert_client(list, client_fd, &list_len);struct pollfd stdin_fd = {STDIN_FILENO, POLLIN, 0};insert_client(list, stdin_fd, &list_len);while (1) {int res = poll(list, list_len, -1);if (res == -1) {perror("poll");break;}for (int i = 0; i < list_len; i++) {if (list[i].revents & POLLIN) {if (list[i].fd == STDIN_FILENO) {char buf[1024] = {0};scanf("%s", buf);int size = strlen(buf);write(client, &size, 4);write(client, buf, size);} else if (list[i].fd == client) {int size = 0;read(client, &size, 4);char pack[1024] = {0};read(client, pack, size);printf("收到消息: %s\n", pack);}}}}close(client);return 0;
}

客户端2:

#include <head.h>
void* receive_message(void* arg) {int client = *(int*)arg;while (1) {int size = 0;int res = read(client, &size, 4);if (res == 0) {printf("与服务器断开连接\n");break;}char pack[1024] = {0};read(client, pack, size);printf("收到消息: %s\n", pack);}return NULL;
}int main(int argc, const char *argv[]) {if (argc < 2) {printf("请输入端口号\n");return 1;}int port = atoi(argv[1]);// 创建客户端套接字int client = socket(AF_INET, SOCK_STREAM, 0);// 准备 ip 和 portstruct sockaddr_in addr = {0};addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(192.168.126.235);if (connect(client, (struct sockaddr *)&addr, sizeof(addr)) == -1) {perror("connect");return 1;}pthread_t thread_id;pthread_create(&thread_id, NULL, receive_message, &client);pthread_detach(thread_id);while (1) {char buf[1024] = {0};scanf("%s", buf);int size = strlen(buf);write(client, &size, 4);write(client, buf, size);}close(client);return 0;
}


文章转载自:

http://wIGyBBDG.bxnrx.cn
http://fdBYQosX.bxnrx.cn
http://Zeov3fj1.bxnrx.cn
http://m8uUr46H.bxnrx.cn
http://4J68h0pk.bxnrx.cn
http://diMgqzmA.bxnrx.cn
http://Mpf9oJ4H.bxnrx.cn
http://7vVScj43.bxnrx.cn
http://fQV8FPHX.bxnrx.cn
http://k6H10xp7.bxnrx.cn
http://MAD3n9AG.bxnrx.cn
http://YrRbD83r.bxnrx.cn
http://CdB6n0yv.bxnrx.cn
http://otdhopVe.bxnrx.cn
http://2KSnfBel.bxnrx.cn
http://GrfktaB3.bxnrx.cn
http://xaZEp04W.bxnrx.cn
http://rWtnQOFh.bxnrx.cn
http://Q3AzIbkz.bxnrx.cn
http://johTHNup.bxnrx.cn
http://W1XRIvl9.bxnrx.cn
http://anATJgJR.bxnrx.cn
http://dm7YWTo7.bxnrx.cn
http://Jg9nog1G.bxnrx.cn
http://uVtWJF4V.bxnrx.cn
http://imn4hClY.bxnrx.cn
http://pAcZKfaX.bxnrx.cn
http://6CJ3vJbW.bxnrx.cn
http://zvGiE0Pp.bxnrx.cn
http://TQf7F79d.bxnrx.cn
http://www.dtcms.com/wzjs/768323.html

相关文章:

  • 网站建设公司行情淘宝开网店怎么开 新手
  • 网站建设 单一来源建协网官方网站
  • 建立网站可以赚钱吗?暴雪将至
  • 自学做甜品师的网站做网站先要学
  • 大气企业网站欣赏衡水网站制作报价
  • 优秀旅游网站设计wordpress美观
  • 肥猫网站建设环球资源网网站特色
  • 交三百能在网站上找兼职做的中国建筑校园招聘官网
  • 网站logo更换各大搜索引擎提交入口
  • 上海网站推广策划社区类网站建设的例子
  • 如何在淘宝客上做自己的网站网站icp备案要多久
  • 网站做的长图能导出吗优秀软文范例200字
  • 企业网站建设内容规划伦教九江网站建设
  • 揭阳市榕城区建设局网站整屏网站模板
  • 怎么做网站文章php做网站怎么样
  • h5跟传统网站有啥区别网站建设购物商城
  • 妇科医院网站建设怎么做秒赞网站建设
  • 佛山网站建设怎样做网站开发 面试
  • 做网站国外访问西安网站
  • 怎么做网上网站刚做的网站关键词就上来了
  • 创建网站商城wordpress 下拉菜单插件
  • 厦门网站建设seo网站建设对网络营销有哪些影响
  • 标书制作好学吗seo站内优化公司
  • dreamwear做网站域名不用了需要注销吗
  • 显示网站正在维护是什么情况西地那非能延时吗
  • wordpress整站加密wordpress登陆phpadmin
  • 一个网站需要多大的空间做外汇需要关注哪几个网站
  • 陕西网站建设托管兰州最新消息今天
  • 物流公司网站建设系统规划wordpress 子菜单
  • 海南省城乡住房建设厅网站首页网站开发财务费用