文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++如何实现TCP聊天室功能

2023-06-20 13:21

关注

小编给大家分享一下C++如何实现TCP聊天室功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体内容如下

C++如何实现TCP聊天室功能

TCPServer.cpp:

// TCPServer.cpp : Defines the entry point for the console application.#include "stdafx.h"#include<iostream>#include<stdio.h>#include<WinSock2.h>using namespace std;#pragma comment(lib,"ws2_32.lib")const char *WELCOMTOCHATROOM = "欢迎来到聊天室";const char *MESSAGECOMED = "收到客户端发来的信息:";const char *ANSWER = "您的回复是:";const char *WAIFORCLIENT = "等待客户连接.......";int main(){ BOOL bSuccess = FALSE;//是否执行成功 int nError = ERROR; SOCKET socketServ = INVALID_SOCKET; SOCKET socketClient = INVALID_SOCKET; do {  WSADATA wsaData;  nError = WSAStartup(MAKEWORD(2, 2), &wsaData);//初始化  if (0 != nError)   break;  //创建Socket  socketServ = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  if (INVALID_SOCKET == socketServ)   break;  //创建地址  sockaddr_in addrServ = { 0 };  addrServ.sin_addr.S_un.S_addr = INADDR_ANY;//所有ip地址  addrServ.sin_family = AF_INET;//ipv4  addrServ.sin_port = htons(10800);//端口  //绑定  if (SOCKET_ERROR == bind(socketServ, (SOCKADDR*)&addrServ, sizeof(addrServ)))   break;  if (SOCKET_ERROR == listen(socketServ, SOMAXCONN))   break;  sockaddr_in addrClient = { 0 };  int nAddrSize = sizeof(addrClient);  //等待客户连接  cout << WAIFORCLIENT << endl;  socketClient = accept(socketServ, (SOCKADDR*)&addrClient, &nAddrSize);  if (INVALID_SOCKET == socketClient)   break;  if (SOCKET_ERROR == send(socketClient, WELCOMTOCHATROOM, strlen(WELCOMTOCHATROOM)+1,0))   break;  char szRecvMessage[MAXBYTE] = { 0 };  char szSendMessage[MAXBYTE] = { 0 };  while (true)  {   int nResult = recv(socketClient, szRecvMessage, MAXBYTE, 0);   if (nResult > 0)   {    cout << MESSAGECOMED << szRecvMessage << endl;    cout << ANSWER;    cin >> szSendMessage;    if (SOCKET_ERROR == send(socketClient, szSendMessage, strlen(szSendMessage)+1, 0))     break;//跳出while   }   else if (nResult == 0)   {    cout << "连接被关闭:" << endl;   break;   }   else   {    cout << "recv错误!" << endl;    break;   }  }  bSuccess = TRUE; } while (false);  if (!bSuccess) {  nError = WSAGetLastError();  cout << "出现错误信息" << nError << endl;  if (INVALID_SOCKET != socketServ)  closesocket(socketServ);  if (INVALID_SOCKET != socketClient)  closesocket(socketClient); } WSACleanup(); system("pause"); return 0;}

TCPClient.cpp:

// TCPClient.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>//#include<stdio.h>#include<WinSock2.h>using namespace std;#pragma comment(lib,"ws2_32.lib")const char *SERVERIPADDRESS = "192.168.8.106";int main(){ bool bSuccess = FALSE; SOCKET socketClient = INVALID_SOCKET;//客户端的套接字 do {  WSADATA wsaData;  if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData))//叫醒  break;  //判断  if (2 != LOBYTE(wsaData.wVersion) ||  2 != HIBYTE(wsaData.wVersion))  break;  //拿手机  socketClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  if (INVALID_SOCKET == socketClient)  break;  //拿到电话号码  sockaddr_in addrServ = { 0 };  addrServ.sin_family = AF_INET;  addrServ.sin_port = htons(10800);  addrServ.sin_addr.S_un.S_addr = inet_addr(SERVERIPADDRESS);  //拨打号码  if (SOCKET_ERROR == connect(socketClient, (SOCKADDR*)&addrServ, sizeof(addrServ)))  break;  char szRecvMessage[MAXBYTE] = { 0 };  char szSendMessage[MAXBYTE] = { 0 };  while (true)  {  int nResult = recv(socketClient, szRecvMessage, MAXBYTE, 0);  if (nResult > 0)//接收到信息  {  cout << "接收到来自服务器的消息:" << szRecvMessage << endl;  cout << "你的回复是:";  cin >> szSendMessage;  if (SOCKET_ERROR == send(socketClient, szSendMessage, MAXBYTE, 0))   break;//跳出循环  }  else if (nResult == 0)//连接被关闭  {   cout << "连接被关闭:" << endl;   break;  }  else  {   cout << "未知原因:" << endl;   break;  }  }  bSuccess = TRUE; } while (FALSE);   if (!bSuccess) {  int nError=WSAGetLastError();  cout << "出现错误信息" << nError << endl;  if (INVALID_SOCKET != socketClient)  closesocket(socketClient); } WSACleanup(); system("pause"); return 0;}

以上是“C++如何实现TCP聊天室功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯