启动服务端等待客户端连接
时间: 2023-08-21 08:05:58 浏览: 51
以下是使用C++语言启动服务器端等待客户端连接的示例代码:
```cpp
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void ErrorExit(const char* lpszMessage)
{
std::cerr << "Error: " << lpszMessage << std::endl;
exit(1);
}
void Server()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorExit("WSAStartup failed");
// 创建一个套接字
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET)
ErrorExit("socket failed");
// 绑定监听地址和端口
sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(1234); // 设置监听端口
serverAddress.sin_addr.s_addr = INADDR_ANY; // 监听所有可用的IP地址
if (bind(serverSocket, reinterpret_cast<sockaddr*>(&serverAddress), sizeof(serverAddress)) == SOCKET_ERROR)
ErrorExit("bind failed");
// 开始监听
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR)
ErrorExit("listen failed");
std::cout << "等待客户端连接..." << std::endl;
// 接受客户端连接
sockaddr_in clientAddress;
int clientAddressLen = sizeof(clientAddress);
SOCKET clientSocket = accept(serverSocket, reinterpret_cast<sockaddr*>(&clientAddress), &clientAddressLen);
if (clientSocket == INVALID_SOCKET)
ErrorExit("accept failed");
// 客户端连接成功
std::cout << "客户端已连接" << std::endl;
// 在这里可以与客户端进行通信
// 关闭套接字
closesocket(clientSocket);
closesocket(serverSocket);
// 清理Winsock库
WSACleanup();
}
int main()
{
Server();
return 0;
}
```
在上述代码中,我们首先调用WSAStartup函数初始化Winsock库。然后,创建一个套接字(socket)并绑定到指定的IP地址和端口上。之后,调用listen函数开始监听客户端连接请求,并通过accept函数接受客户端的连接。一旦有客户端连接成功,就可以在accept函数之后的代码中与客户端进行通信。
请确保你的系统上已经安装了Winsock库,并且在编译时链接ws2_32.lib库。
这只是一个简单的示例代码,你可以根据实际需求进行修改和扩展。例如,在接受客户端连接后,你可以使用send和recv函数进行数据的收发操作,以实现与客户端之间的通信。