【C++】TCP通信服务端与客户端代码实现及详解 |
您所在的位置:网站首页 › tcp服务端和客户端 › 【C++】TCP通信服务端与客户端代码实现及详解 |
目录
一、服务端server实现1. server代码2. 代码详解
二、客户端client实现1. client代码2. 代码详解
三、运行效果图四、总结如果这篇文章对你有所帮助,渴望获得你的一个点赞!
一、服务端server实现
1. server代码
#include
#include
#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
#define PORT 65432
void Cleanup(SOCKET socket)
{
closesocket(socket);
WSACleanup();
}
void HandleClientCommunication(SOCKET clientSocket)
{
std::cout
std::cout
std::cout
std::cout
std::cout
std::cout
sockaddr_in clientAddress;
int clientAddressSize = sizeof(clientAddress);
SOCKET clientSocket = accept(serverSocket, reinterpret_cast(&clientAddress), &clientAddressSize);
if (clientSocket != INVALID_SOCKET)
{
std::thread clientThread(HandleClientCommunication, clientSocket);
clientThread.detach(); // 分离线程,不等待线程结束
}
}
Cleanup(serverSocket);
return 0;
}
2. 代码详解
上述代码使用Winsock库实现了简单的TCP服务器,它监听指定端口并与客户端进行通信。下面对代码进行详细分析: #pragma comment(lib, "ws2_32.lib") 是一个特殊的编译器指令,用于告诉编译器在链接阶段将 ws2_32.lib 库文件添加到最终的可执行文件中。无需在编译命令行或IDE中显式指定。这样做的好处是,可以将库文件的链接过程自动化,减少了手动操作的繁琐性,并确保在编译和链接过程中正确地使用所需的库文件。需要注意的是,该指令是特定于Microsoft Visual C++编译器的,并不是标准C++的一部分,因此在使用其他编译器时可能需要采用不同的方式来链接相应的库文件。 Cleanup函数:该函数用于关闭套接字并清理WSA(Winsock库)的资源。在程序退出前,应该调用该函数来进行善后处理。 void Cleanup(SOCKET socket) { closesocket(socket); //关闭套接字 WSACleanup(); //清理WSA的资源 }HandleClientCommunication函数:该函数在单独的线程中处理与客户端的通信。它首先向客户端发送数据,然后接收客户端的响应。如果接收到的消息是"end",表示客户端要求关闭连接,函数会退出循环并关闭套接字。 main函数:程序的入口函数。它首先初始化Winsock库,创建一个套接字并绑定到指定的IP地址和端口。然后,服务器开始监听客户端连接请求。当有客户端连接时,将创建一个新的线程来处理与该客户端的通信。使用detach函数将线程分离,不等待线程结束。 WSAStartup:初始化Ws2_32.dll动态链接库,指定winsock2.2版本,在使用socket之前,一定要初始化该链接库。。 WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2, 2); if (WSAStartup(wVersionRequested, &wsaData) != 0) { std::cout WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2, 2); if (WSAStartup(wVersionRequested, &wsaData) != 0) { std::cout std::cout if (size == 0) std::cout std::cout std::cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |