通过C++实现基于socket的TCP聊天服务器
2026/5/14 1:07:06 网站建设 项目流程

什么是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;}

实现结果


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询