visual stdio 创建 socket线程代码
时间: 2023-03-22 09:01:47 浏览: 74
下面是在 Visual Studio 中创建 Socket 线程的代码示例:
```c++
#include <iostream>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <thread>
#pragma comment (lib, "Ws2_32.lib")
void clientThread(SOCKET clientSocket)
{
char buffer[1024];
int recvSize = 0;
// 接收客户端发送的消息
while ((recvSize = recv(clientSocket, buffer, sizeof(buffer), 0)) > 0)
{
buffer[recvSize] = '\0';
std::cout << "Received message: " << buffer << std::endl;
// 回复客户端消息
std::string response = "Message received: ";
response += buffer;
send(clientSocket, response.c_str(), response.length(), 0);
}
// 关闭客户端 Socket 连接
closesocket(clientSocket);
}
int main()
{
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0)
{
std::cerr << "WSAStartup failed: " << result << std::endl;
return 1;
}
// 创建监听 Socket
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET)
{
std::cerr << "Error creating socket: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
// 绑定监听 Socket 到本地地址和端口
sockaddr_in localAddress;
localAddress.sin_family = AF_INET;
localAddress.sin_addr.s_addr = INADDR_ANY;
localAddress.sin_port = htons(1234);
if (bind(listenSocket, reinterpret_cast<sockaddr*>(&localAddress), sizeof(localAddress)) == SOCKET_ERROR)
{
std::cerr << "Error binding socket: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
// 监听客户端连接请求
if (listen(listenSocket, SOMAXCONN) == SOCKET_ERROR)
{
std::cerr << "Error listening on socket: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
std::cout << "Listening for connections..." << std::endl;
while (true)
{
// 接受客户端连接请求
sockaddr_in clientAddress;
int clientAddressSize = sizeof(clientAddress);
SOCKET clientSocket = accept(listenSocket, reinterpret_cast<sockaddr*>(&clientAddress), &clientAddressSize);
if (clientSocket == INVALID_SOCKET)
{
std::cerr << "Error accepting socket: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
// 创建新线程来处理客户端请求
std::thread t(clientThread, clientSocket);
t.detach();
}
// 关闭监听 Socket
closesocket(listenSocket);
WSACleanup();
return 0;
}
```
该代码使用 WinSock 库来创建一个监听 Socket,并等待客户端连接。当有客户端连接时,会创建一个新线程来处理客户端请求,并在主线程继续等待下一个
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)