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

无极app定制开发公司网站模板广州网站优化指导

无极app定制开发公司网站模板,广州网站优化指导,网站建设合同的要素及签订注意事项,如何删除网站黑链一、项目要求 利用UDP协议#xff0c;实现一套聊天室软件。服务器端记录客户端的地址#xff0c;客户端发送消息后#xff0c;服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址#xff1f; UDP客户端不会直接互连#xff0c;所以不会获知其它客…一、项目要求 利用UDP协议实现一套聊天室软件。服务器端记录客户端的地址客户端发送消息后服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址 UDP客户端不会直接互连所以不会获知其它客户端地址所有客户端地址存储在服务器端。 有几种消息类型登录服务器存储新的客户端的地址。把某个客户端登录的消息发给其它客户端。聊天服务器只需要把某个客户端的聊天消息转发给所有其它客户端。退出服务器删除退出客户端的地址并把退出消息发送给其它客户端。服务器如何存储客户端的地址 数据结构可以选择线性数据结构 链表节点结构体 struct node{ struct sockaddr_in addr;//data   memcmp struct node *next; }; 消息对应的结构体(同一个协议) typedef struct msg_t { int type;//L C  Q    enum un{login,chat,quit}; char name[32];//用户名 char text[128];//消息正文 }MSG_t; int memcmp(void *s1,void *s2,int size) 客户端如何同时处理发送和接收 客户端不仅需要读取服务器消息而且需要发送消息。读取需要调用recvfrom发送需要先调用gets两个都是阻塞函数。所以必须使用多任务来同时处理可以使用多进程或者多线程来处理。 二、程序流程图 服务器端 ​ 客户端 ​三、代码实现 server.c代码部分 #includestdio.h #include sys/types.h #include sys/socket.h #include arpa/inet.h #include sys/socket.h #include netinet/in.h #include netinet/ip.h #includeunistd.h #includearpa/inet.h #includestring.h #includestdlib.h #include sys/wait.h #includedirent.h #includesys/stat.h #includesignal.h #include pthread.hstruct sockaddr_in serveraddr,caddr; enum type_t//枚举 {Login,Chat,Quit, }; typedef struct MSG {char type;//L C Qchar name[32];//char text[128];// }msg_t;typedef struct NODE//链表 {struct sockaddr_in caddr;struct NODE *next; }node_t;node_t *create_node(void)//建头节点 {node_t *p(node_t *)malloc(sizeof(node_t));if(pNULL){perror(malloc err);return NULL;}p-nextNULL;return p;} void do_login(int ,msg_t ,node_t *,struct sockaddr_in);//登录的函数 void do_chat(int ,msg_t ,node_t *,struct sockaddr_in);//群聊的函数 void do_quit(int ,msg_t ,node_t *,struct sockaddr_in);//退出函数 int main(int argc, char const *argv[]) {if(argc !3){printf(Usage:./a.out port\n);return -1;}//创建UDP套接字int sockfd socket(AF_INET,SOCK_DGRAM,0);if(sockfd0){perror(socket err);exit(-1);}//填充服务器网络信息结构体serveraddr.sin_familyAF_INET;serveraddr.sin_porthtons(atoi(argv[2]));serveraddr.sin_addr.s_addrinet_addr(argv[1]);socklen_t len sizeof(caddr);//定义保存客户端网络信息的结构体//绑定套接字和服务器网络信息的结构体bind(sockfd,(struct sockaddr *)serveraddr,sizeof(serveraddr));printf(bind ok!\n);msg_t msg;node_t *pcreate_node();while(1){if(recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)caddr,len)0){perror(recvfrom err);return -1;}if(msg.typeLogin){strcpy(msg.text,以上线);printf(ip:%s pord:%d name:%s\n,inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),msg.name);printf(状态:%s\n,msg.text);do_login(sockfd,msg,p,caddr);}else if(msg.typeChat){do_chat(sockfd,msg,p,caddr); }else if(msg.typeQuit){strcpy(msg.text,以下线);printf(ip:%s pord:%d name:%s\n,inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),msg.name);printf(状态:%s\n,msg.text);do_quit(sockfd,msg,p,caddr); }}close(sockfd);return 0; } //登录的函数 //功能 //1》将新登录的用户转发给所有已经登录的用户遍历链表发送谁登录的消息 //2》创建新节点来保存新登录用户的信息链接到链表尾就可以 void do_login(int sockfd,msg_t msg,node_t *p,struct sockaddr_in caddr) {sprintf(msg.text,%s 以上线,msg.name);while(p-next ! NULL){p p-next;sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)(p-caddr),sizeof(p-caddr));//printf(%s\n,msg.text);}node_t *new(node_t *)malloc(sizeof(node_t));//初始化new-caddrcaddr;new-nextNULL;//链接到链表尾p-nextnew;return; } //群聊的函数 //功能将客户端发来的聊天内容转发给所有已登录的用户除了发送聊天内容的用户以外 void do_chat(int sockfd,msg_t msg,node_t *p,struct sockaddr_in caddr) {//遍历链表while(p-next ! NULL){pp-next;if(memcmp((p-caddr),caddr,sizeof(caddr)) ! 0){sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)(p-caddr),sizeof(p-caddr));}}return; } //退出函数 //功能 //1》将谁退出的消息转发给i所有用户 //2》将链表中保存这个推出的用户信息的节点删除 void do_quit(int sockfd,msg_t msg,node_t *p,struct sockaddr_in caddr) {sprintf(msg.text,%s 以下线,msg.name);while(p-next ! NULL){if((memcmp((p-next-caddr),caddr,sizeof(caddr)))0){ node_t *deleNULL;dele p-next;p-nextdele-next;free(dele);deleNULL;}else{pp-next;sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)(p-caddr),sizeof(p-caddr));} }return; } client.c代码部分 #includestdio.h #include sys/types.h #include sys/socket.h #include arpa/inet.h #include sys/socket.h #include netinet/in.h #include netinet/ip.h #includeunistd.h #includearpa/inet.h #includestring.h #includestdlib.h #include sys/wait.h #includedirent.h #includesys/stat.henum type_t {Login,Chat,Quit, }; typedef struct {char type;//L C Qchar name[32];//char text[128];// }msg_t;int main(int argc, char const *argv[]) {if(argc !3){printf(Usage ./a.out ip port\n);return -1;}int sockfd socket(AF_INET,SOCK_DGRAM,0);if(sockfd0){perror(socket err);exit(-1);}struct sockaddr_in serveraddr;serveraddr.sin_familyAF_INET;serveraddr.sin_porthtons(atoi(argv[2]));serveraddr.sin_addr.s_addrinet_addr(argv[1]);socklen_t len sizeof(serveraddr);msg_t msg;//先执行登录操作 printf(请登录:\n);msg.typeLogin;printf(请输入用户名:);fgets(msg.name,32,stdin);if(msg.name[strlen(msg.name)-1]\n)msg.name[strlen(msg.name)-1]\0;//发送登录消息if(sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)serveraddr,len)0){perror(sendto err);exit(-1);}pid_t pidfork();if(pid0){perror(fork err);exit(-1);}else if(pid0){while(1){if(recvfrom(sockfd,msg,sizeof(msg),0,NULL,NULL)0){perror(recvfrom err);return -1;}printf([%s]:%s\n,msg.name,msg.text);} } else {while(1){fgets(msg.text,sizeof(msg.text),stdin);if(msg.text[strlen(msg.text)-1]\n)msg.text[strlen(msg.text)-1]\0;if(strcmp(msg.text,quit)0){msg.typeQuit; sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)serveraddr,len);kill(pid,SIGKILL);wait(NULL);exit(-1);}else{msg.typeChat;}//发送消息sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)serveraddr,len);}}close(sockfd);return 0; }
http://www.pierceye.com/news/480347/

相关文章:

  • 做网站国内阿里云虚拟主机多少钱东莞常平中学高中部
  • 用.net做购物网站灵山建设局网站
  • 烟台网站设计制作公司电话python购物网站开发流程
  • 医疗网站怎么做seo怎样通过网址浏览自己做的网站
  • 湖北现代城市建设集团网站wordpress用户头像插件
  • 徐州双语网站制作响应式网站开发pdf
  • 怎么做建设网站公司创建一个网站多少钱
  • 好看的扁平化网站wordpress插件编写
  • 深圳网站设计模板ps可以做网站动态图
  • 微信网站制作入门网站开发实施方案进度
  • 网站用户界面设计国内网站建设最好公司
  • 运城做网站费用高吗高端模板建站
  • 凡客诚品网站设计合肥网红打卡地
  • 淘宝网站代理怎么做的广西送变电建设公司铁塔厂网站
  • 自媒体网站开发网站的推广方式包括
  • 教育做的比较好的网站有哪些网站的建设及维护
  • dw设计做网站案例建设网站杭州
  • 做网站认证对网站有什么好处广西网站建设开发团队
  • 建一个网站需要哪些知识无锡大型互联网公司
  • 餐饮公司 网站建设做网站一年大概的盈利
  • 做金融怎么进基金公司网站免费行情软件网站游戏
  • 网站推广解释创立一个网站要多少钱
  • 绍兴专业网站建设公司大型网站建设哪家好
  • 天河网站设计响应式视频网站模板
  • 网站制作老了手机网站模板开发
  • 哪家网站建设比较好海拉尔建网站
  • 丹东网站推广海南行指专业网站开发
  • 网站如何调用手机淘宝做淘宝客中国企业网站查询
  • 淄博建设工程学校官方网站专门做商标的网站有哪些
  • 私人免费网站怎么下载企业网站设计方案