socket多人聊天程序C语言版

socket多人聊天程序C语言版

ID:39468297

大小:64.50 KB

页数:15页

时间:2019-07-04

socket多人聊天程序C语言版_第1页
socket多人聊天程序C语言版_第2页
socket多人聊天程序C语言版_第3页
socket多人聊天程序C语言版_第4页
socket多人聊天程序C语言版_第5页
资源描述:

《socket多人聊天程序C语言版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、socket多人聊天程序C语言版1V1实现了,1V多也就容易了。不过相对于1V1的程序,我经过大改,采用链表来动态管理。这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了。用C语言写这个还是挺费时间的,因为什么功能函数都要自己写,不像C++有STL库可以用,MFC写就更简单了,接下来我还会更新MFC版本的多人聊天程序。好了,废话少说,进入主题。这个程序要解决的问题如下:1.CPU使用率飙升问题–>用链表动态管理2.用户自定义聊天,就是想跟谁聊跟谁聊–>_Client结构体中新增一个ChatName字段,用来表示要和谁聊天,这个字段很重要,

2、因为server转发消息的时候就是按照这个字段来转发的。3.中途换人聊天,就是聊着聊着,想和别人聊,而且自己还一样能接收到其它人发的消息–>这个就要小改客户端的代码了,可以在发送聊天消息之前插入一段代码,用来切换聊天用户。具体做法就是,用getch()函数读取ESC键,如果用户按了这个键,则表示想切换用户,然后会输出一行提示,请输入chatname,就是想要和谁聊天的名字,发送这个名字过去之前要加一个标识符,表示这个消息是切换聊天用户消息。然后server接收到这个消息后会判断第一个字符是不是标识符,第二个字符不能是标识符,则根据这个name来查找当前在线的用

3、户,然后修改想切换聊天用户的ChatName为name这个用户。(可能有点绕,不懂的看代码就清晰易懂了~)4.下线后提醒对方–>还是老套路,只要send对方不通就当对方下线了。编写环境:WIN10,VS2015效果图:为了方便就不用虚拟机演示了,但是在虚拟机是肯定可以的,应该说只要是局域网,能互相ping通就可以使用这个程序。Servercode:链表头文件:#ifndef_CLIENT_LINK_LIST_H_#define_CLIENT_LINK_LIST_H_#include#include//客户端信息结构体t

4、ypedefstruct_Client{SOCKETsClient;//客户端套接字charbuf[128];//数据缓冲区charuserName[16];//客户端用户名charIP[20];//客户端IPunsignedshortPort;//客户端端口UINT_PTRflag;//标记客户端,用来区分不同的客户端charChatName[16];//指定要和哪个客户端聊天_Client*next;//指向下一个结点}Client,*pClient;/**function初始化链表*return无返回值*/voidInit();/**function获取

5、头节点*return返回头节点*/pClientGetHeadNode();/**function添加一个客户端*paramclient表示一个客户端对象*return无返回值*/voidAddClient(pClientclient);/**function删除一个客户端*paramflag标识一个客户端对象*return返回true表示删除成功,false表示失败*/boolRemoveClient(UINT_PTRflag);/**function根据name查找指定客户端*paramname是指定客户端的用户名*return返回一个client表示查找

6、成功,返回INVALID_SOCKET表示无此用户*/SOCKETFindClient(char*name);/**function根据SOCKET查找指定客户端*paramclient是指定客户端的套接字*return返回一个pClient表示查找成功,返回NULL表示无此用户*/pClientFindClient(SOCKETclient);/**function计算客户端连接数*paramclient表示一个客户端对象*return返回连接数*/intCountCon();/**function清空链表*return无返回值*/voidClearClie

7、nt();/**function检查连接状态并关闭一个连接*return返回值*/voidCheckConnection();/**function指定发送给哪个客户端*paramFromName,发信人*paramToName,收信人*paramdata,发送的消息*/voidSendData(char*FromName,char*ToName,char*data);#endif//_CLIENT_LINK_LIST_H_链表cpp文件:?#include"ClientLinkList.h"pClienthead

8、=(pClient)malloc(si

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。