千家信息网

C++基于socket多线程怎么实现网络聊天室

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了C++基于socket多线程怎么实现网络聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于socket多线程怎么实现网络聊天室文章都会有所收
千家信息网最后更新 2026年11月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的头文件#includeusing  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安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 广东万易互联网科技有限公司惠州分公司 互联网科技工作委员会副主任毛军 科技创新与互联网经济 互联网科技金融 互联网科技视频 西安互联网科技公司 卓越科技互联网 招聘 金融科技和互联网金融 哈尔滨新华互联网科技学院 创业天下互联网科技有限公司 成都铂石互联网科技做什么的 呼和浩特新华互联网科技学院 工业互联网展湾科技股份有限公司 华中科技大学互联网的牛人 广州富喜互联网络科技 富国互联网科技002692 同城互联网络科技 安徽九吞吴互联网科技有限公司 广东猫王互联网科技有限公司电话 A股互联网金融科技公司 广州互联网科技公司 合肥互联网科技公司 猪兼强互联网科技 深圳卡尔迅互联网科技有限公司怎么样 广州恒生互联网科技有限 厦门比较好的科技互联网公司 世界互联网领先科技成果获奖 银川新华互联网科技学校是国营吗 互联网科技自媒体灵感
0