流水不争先,争的是滔滔不绝

简易聊天室的源码实现

IM安全 macgrady 258℃

即时通讯生活应用中群聊是经常用到的一个功能,yuliao系统经过多年技术积累,满足各类企业私有化定制需求,支持全类型消息收发,灵活的群组成员和权限管理方案,消息内容转发收藏,群公告消息历史记录查询,支持横向扩展,聊天室人数无上限。

IM即时通讯系统:(仿微信界面)
系统端:Android端,IOS端,PC端,以及强大的后台管理
快速搭建部署完全私有聊天系统,加密通讯,安全可靠性
负载均衡分布式消息转发技术,提高了即时通信的信息传输速度、服务器健壮稳定。
语音视频预留接口,可根据不同网络环境选择合适的编码方案
软件功能包括即时聊天,消息推送,语音视频,文件传输,红包,朋友圈,私聊群聊等
即时通讯+网络视频会议+企业私有化定制:
系统架构层次分明,用户传输数据按功能需求再不同逻辑架构逐层递进。采用此结构降低了各模块之间的耦合度,从而提高了系统的健壮性和可维护性。消息通讯采用私有二进制加密协议、RSA+流式加密传输安全可靠
全部源码开放,可量身打造出适合企业自身发展的网络即时通讯产品
系统优势:原生开发,支持横向扩展,支持大数据并发,多年技术积累,支持2次开发。

HANDLE g_hEvent;            /*事件内核对象*/

 // 创建一个自动重置的(auto-reset events),受信的(signaled)事件内核对象

 g_hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);

然后再需要访问clnt_cnt这个变量之前进行加锁(设置等待),访问完成之后解锁(设置受信)

 /*等待内核事件对象状态受信*/

 WaitForSingleObject(g_hEvent, INFINITE);

 hThread[clnt_cnt] = CreateThread(NULL,NULL,ThreadProc,(void*)&clnt_sock,0,&dwThreadId);

 clnt_socks[clnt_cnt++] = clnt_sock;

 SetEvent(g_hEvent);             /*设置受信*/

通过套接字数组来进行数据的转发实现群聊功能,此时也用到了线程同步

 void send_msg(char* msg, int len)

 {

     int i;

     /*等待内核事件对象状态受信*/

     WaitForSingleObject(g_hEvent, INFINITE);

     for (i = 0; i < clnt_cnt; i++)

         send(clnt_socks[i], msg, len, 0);

     SetEvent(g_hEvent);     /*设置受信*/

 }

客户端设计

同样也是在创建套接字连接到服务器之后,创建两个线程

一个和服务端进行数据的发送

 DWORD WINAPI send_msg(LPVOID lpParam)

 {

     int sock = *((int*)lpParam);

     char name_msg[NAME_SIZE + BUF_SIZE];

     while (1)

     {

         fgets(msg, BUF_SIZE, stdin);

         if (!strcmp(msg, “qn”) || !strcmp(msg, “Qn”))

         {

             closesocket(sock);

             exit(0);

         }

         sprintf(name_msg, “[%s]: %s”, name, msg);

         int nRecv = send(sock, name_msg, strlen(name_msg), 0);

     }

     return NULL;

 }

一个用来接收服务端数据并打印输出到终端

 DWORD WINAPI recv_msg(LPVOID lpParam)

 {

     int sock = *((int*)lpParam);

     char name_msg[NAME_SIZE + BUF_SIZE];

     int str_len;

     while (1)

     {

         str_len = recv(sock, name_msg, NAME_SIZE + BUF_SIZE – 1, 0);

         if (str_len == -1)

             return -1;

         name_msg[str_len] = 0;

         fputs(name_msg, stdout);

     }

     return NULL;

 }

来源[源码获取]:

windows简易聊天室

链接:https://pan.baidu.com/s/1b5OnClTAICaygZ0lCoq9kg 提取码:i6v3

相关资源:qq群发源码

————————————————

版权声明:本文为CSDN博主「weixin_39585886」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_39585886/article/details/111586546

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。
点击这里给我发消息