当前位置: 首页 > news >正文

通过C++实现基于socket的TCP聊天服务器

什么是socket

socket是一套用于不同主机间的API。
IP地址用于唯一标识网络设备;端口用于区分主机上的不同应用(进程);
通过socket可以在不同主机不同应用之间建立一条虚拟通道;(点对点,应用对应用);
socket有两种类型,TCP(一对一数据流,不会丢包)和UDP(广播式);

服务器Server.cpp

1.创建一个socket, AF_INET表示使用的是IPV4地址,SOCK_STREAM表示使用的是TCP协议

SOCKET serverSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

2.bind函数表示的是将我们的socket关联到我们的主机的网卡和端口上

bind(serverSock,(sockaddr*)&serverAddr,sizeof(serverAddr));

3.listen函数将我们的socket设置为监听状态,等待客户端的连接

listen(serverSock,5);

4.接受任意客户端的连接,并返回一个新的socket和IP地址

sockaddr_in clientAddr;intaddrLen=sizeof(clientAddr);SOCKET clientSock=accept(serverSock,(sockaddr*)&clientAddr,&addrLen);

5.配置客户端功能

charrecvBuf[BUF_SIZE];while(true){// 接收客户端消息ZeroMemory(recvBuf,BUF_SIZE);intret=recv(clientSock,recvBuf,BUF_SIZE,0);if(ret<=0){cout<<"客户端断开连接"<<endl;break;}cout<<"客户端:"<<recvBuf<<endl;// 服务器回复消息string sendMsg;cout<<"输入回复:";getline(cin,sendMsg);send(clientSock,sendMsg.c_str(),sendMsg.length(),0);}

客户端Client.cpp

1.同样创建一个socket

SOCKET clientSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

2.配置好服务器的IP地址和端口号

sockaddr_in serverAddr{};serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(PORT);serverAddr.sin_addr.S_un.S_addr=inet_addr(SERVER_IP);

3.连接服务器

connect(clientSock,(sockaddr*)&serverAddr,sizeof(serverAddr));cout<<"已连接聊天服务器!"<<endl;

4.配置客户端功能

charrecvBuf[BUF_SIZE];while(true){// 发送消息给服务器string sendMsg;cout<<"输入消息:";getline(cin,sendMsg);send(clientSock,sendMsg.c_str(),sendMsg.length(),0);// 接收服务器回复ZeroMemory(recvBuf,BUF_SIZE);recv(clientSock,recvBuf,BUF_SIZE,0);cout<<"服务器:"<<recvBuf<<endl;}

实现结果


http://www.jsqmd.com/news/812160/

相关文章:

  • 免费解锁WeMod专业版:3步获得完整游戏增强体验的终极方案
  • VSCode提示流工程化:从AI对话到可复用代码生成流水线
  • 普通本科应届生,编程面试拿了12个offer,全靠这套方法
  • 深入对比:K210驱动MAX98357A与PT8211/TM8211,I2S模式配置到底有啥不同?
  • 2026年柔性瓷砖胶TOP10排行:膏状瓷砖背胶/装修美缝剂/防水隔热涂料/K11防水涂料/卫生间防水材料/屋顶防水材料/选择指南 - 优质品牌商家
  • 初创公司如何利用Taotoken的多模型与成本管理功能支撑产品原型开发
  • 高频信号测量中的去嵌入技术原理与应用
  • 从一次调试Bug说起:为什么我的Matlab循环次数总不对?可能是length用错了
  • Meshes AI Tools:高效集成LLM的开发者工具箱
  • 2026年至今,广州企业如何选择靠谱的抖音推广服务商? - 2026年企业推荐榜
  • 2026年单开门专业品牌排行榜定制化优选指南:四川智能防盗门/四川甲级防盗门/四川简约入户门/四川自建房大门/四川轻奢入户门/选择指南 - 优质品牌商家
  • 告别踩坑!手把手教你用VMware在CentOS 8.5上配置静态IP和关闭SELinux(保姆级图文)
  • 零基础上手OpenClaw v2.7.1 Win10系统兼容性优化部署方案
  • 电信运营商M2M战略转型:从连接人到连接物的物联网新增长引擎
  • Cadence用户必备:Ultra Librarian下载的封装,如何快速适配你的OrCAD 17.4和Allegro版本?
  • 2026年第二季度济南家具家私保护膜专业服务商深度解析:阿莱特科技有限公司优势凸显 - 2026年企业推荐榜
  • 从锡疫到无铅焊料失效:材料环境可靠性设计实战解析
  • 3分钟掌握APK安装器:Windows上运行安卓应用的终极解决方案
  • 为AI智能体构建结构化记忆系统:知识图谱与上下文压缩实战
  • 不只是配置:用海康威视工业相机SDK(V3.3.0)和VS2017写你的第一个图像采集程序
  • 从告示牌到芯片设计:如何避免意图与解读的鸿沟
  • 心理学论文降AI工具免费推荐:2026年心理学研究毕业论文4.8元亲测降AI99.26%达标指南
  • DDR内存信号测试难题:芯片中介层原理与实战部署指南
  • 书匠策AI毕业论文功能全拆解:这个AI工具凭什么让你从“论文废“逆袭成“论文达人“?
  • 安全即代码:将安全融入DevOps流程
  • 如何用ChatLaw构建你的专属法律AI助手:3步快速部署与实战指南
  • 别慌!你家烟雾报警器里的‘小纽扣’辐射有多大?实测数据告诉你真相
  • 2026年软文自助发稿平台TOP8权威测评:传声港领跑行业,全链路AI营销时代来临 - 博客湾
  • 【图像重建】基于ADMM(交替方向乘子法)的深度图重建三维重建 MATLAB 代码
  • 在Node.js服务中集成Taotoken实现多模型API的稳定调用