C++基于socket多线程怎么实现网络聊天室
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍了C++基于socket多线程怎么实现网络聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于socket多线程怎么实现网络聊天室文章都会有所收
千家信息网最后更新 2025年12月03日C++基于socket多线程怎么实现网络聊天室
这篇文章主要介绍了C++基于socket多线程怎么实现网络聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于socket多线程怎么实现网络聊天室文章都会有所收获,下面我们一起来看看吧。
1. 实现图解
2. 聊天室服务端:TCP_Server_Chat.cpp
#include// winsock2的头文件#include #pragma comment(lib, "ws2_32.lib")using namespace std;// stdcall的线程处理函数DWORD WINAPI ThreadFun(LPVOID lpThreadParameter);int main(){ WSADATA wd; if(WSAStartup(MAKEWORD(2,2), &wd) != 0) { cout << "WSAStartup Error:" << WSAGetLastError() << endl; return 0; } // 1. 创建流式套接字 SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(s == INVALID_SOCKET) { cout << "socket error:" << WSAGetLastError() << endl; return 0; } // 2. 绑定端口和ip sockaddr_in addr; memset(&addr, 0, sizeof(sockaddr_in)); addr.sin_family = AF_INET; addr.sin_port = htons(8000); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); int len = sizeof(sockaddr_in); if(bind(s, (SOCKADDR*)&addr, len) == SOCKET_ERROR) { cout << "bind Error:" << WSAGetLastError() << endl; return 0; } // 3. 监听 listen(s,5); // 主线程循环接收客户端的连接 while(true) { sockaddr_in addrClient; len = sizeof(sockaddr_in); // 4.接受成功返回与client通讯的Socket SOCKET c = accept(s, (SOCKADDR*)&addrClient, &len); if(c != INVALID_SOCKET) { // 创建线程,并且传入与client通讯的套接字 HANDLE hThread = CreateThread(NULL, 0, ThreadFun, (LPVOID)c, 0, NULL); CloseHandle(hThread); // 关闭对线程的引用 } } // 6.关闭监听套接字 closesocket(s); // 清理winsock2的环境 WSACleanup(); return 0;}DWORD WINAPI ThreadFun(LPVOID lpThreadParameter){ // 5.与客户端通讯,发送或者接受数据 SOCKET c= (SOCKET)lpThreadParameter; cout << "欢迎" << c << "进入聊天室!" << endl; // 发送数据 char buf[100] = {0}; sprintf(buf,"欢迎 %d 进入聊天室!",c); send(c,buf, 100, 0); // 循环接收客户端数据 int ret=0; do { char buf2[100] = {0}; ret = recv(c, buf2, 100, 0); cout << c << " 说:" << buf2 << endl; } while (ret!=SOCKET_ERROR && ret!=0); cout << c << "离开了聊天室!"; return 0;}
启动聊天室服务端:

3. 聊天室客户端:TCP_Client_Chat.cpp
#include//winsock2的头文件#include using namespace std;//勿忘,链接dll的lib#pragma comment(lib, "ws2_32.lib")int main(){ //加载winsock2的环境 WSADATA wd; if (WSAStartup(MAKEWORD(2, 2), &wd) != 0) { cout << "WSAStartup error:" << GetLastError() << endl; return 0; } //1.创建流式套接字 SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { cout << "socket error:" << GetLastError() << endl; return 0; } //2.链接服务器 sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8000); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); int len = sizeof(sockaddr_in); if (connect(s, (SOCKADDR*)&addr, len) == SOCKET_ERROR) { cout << "connect error:" << GetLastError() << endl; return 0; } //3接收服务端的消息 char buf[100] = { 0 }; recv(s, buf, 100, 0); cout << buf << endl; //3随时给服务端发消息 int ret = 0; do { char buf[100] = {0}; cout << "请输入聊天内容:"; cin >> buf; ret = send(s, buf, 100, 0); } while (ret != SOCKET_ERROR&& ret != 0); //4.关闭监听套接字 closesocket(s); //清理winsock2的环境 WSACleanup(); return 0;}
启动2个客户端
关于"C++基于socket多线程怎么实现网络聊天室"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C++基于socket多线程怎么实现网络聊天室"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
聊天室
线程
套接字
客户
服务
网络
C++
客户端
数据
环境
知识
通讯
监听
内容
文件
消息
端的
篇文章
链接
循环
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银行软件开发具体是什么
安徽综合软件开发要多少钱
光迅科技 电力互联网
我的世界服务器如何保存物品
京东云服务器好用吗
教育行业oa服务器
网络技术支持服务保障
学年论文会收录数据库吗
计算机网络安全问题内容
ads是什么网络安全设备
怀柔区正规网络技术质量推荐
网络安全使用禁令
网络安全审计哪个品牌好
服务器怎么跑网心云
点豆网络技术有限公司怎样
dns服务与web服务器
数据库性能扫描工具
ftp服务器评测
慕课网络技术有限公司
医院的信息科网络安全
服务器漏扫
科信大队网络安全检查简报
服务器属于有线传输介质吗
具前景的零信任网络安全
怎样查海关数据库
福建设计存储服务器机箱加工
4合1服务器
软件开发工程师学什么
精准部署网络安全
超算服务器维修公司哪家好