套接字上位机编程源码C++
时间: 2023-10-13 08:04:24 浏览: 51
以下是一个简单的套接字上位机编程的C++源码示例:
```c++
#include <iostream>
#include <winsock2.h> // 包含Winsock库的头文件
#pragma comment(lib,"ws2_32.lib") // 链接Winsock库文件
using namespace std;
int main()
{
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup(wVersionRequested, &wsaData) != 0) // 初始化Winsock库
{
cout << "启动Winsock库失败!" << endl;
return 0;
}
// 创建套接字
int serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (serverSocket == INVALID_SOCKET)
{
cout << "创建套接字失败!" << endl;
WSACleanup();
return 0;
}
// 绑定套接字
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8888);
serverAddr.sin_addr.s_addr = INADDR_ANY;
if (bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
{
cout << "绑定套接字失败!" << endl;
closesocket(serverSocket);
WSACleanup();
return 0;
}
// 监听套接字
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR)
{
cout << "监听套接字失败!" << endl;
closesocket(serverSocket);
WSACleanup();
return 0;
}
while (true)
{
// 接受客户端连接
sockaddr_in clientAddr;
int clientAddrLen = sizeof(clientAddr);
int clientSocket = accept(serverSocket, (sockaddr*)&clientAddr, &clientAddrLen);
if (clientSocket == INVALID_SOCKET)
{
cout << "接受客户端连接失败!" << endl;
closesocket(serverSocket);
WSACleanup();
return 0;
}
// 接收客户端数据
char recvBuf[1024] = { 0 };
int recvLen = recv(clientSocket, recvBuf, sizeof(recvBuf), 0);
if (recvLen == SOCKET_ERROR)
{
cout << "接收数据失败!" << endl;
closesocket(clientSocket);
continue;
}
cout << "接收到客户端数据:" << recvBuf << endl;
// 发送数据到客户端
const char* sendBuf = "Hello, Client!";
int sendLen = send(clientSocket, sendBuf, strlen(sendBuf), 0);
if (sendLen == SOCKET_ERROR)
{
cout << "发送数据失败!" << endl;
closesocket(clientSocket);
continue;
}
cout << "发送数据到客户端:" << sendBuf << endl;
// 关闭客户端套接字
closesocket(clientSocket);
}
// 关闭套接字
closesocket(serverSocket);
WSACleanup();
return 0;
}
```
这个示例程序实现了一个简单的TCP服务器,它可以接受客户端的连接请求,并接收来自客户端的数据,并向客户端发送回复数据。注意,这段代码只是一个简单的示例,实际的套接字编程可能需要更多的处理来确保程序的正确性和稳定性。