c++ windows socket
时间: 2023-08-31 21:11:50 浏览: 104
C++ socket
3星 · 编辑精心推荐
在Windows平台上使用C++编写Socket套接字程序需要包含一些头文件和链接相应的库文件。首先,需要包含以下头文件:
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
然后,需要链接ws2_32.lib库文件,可以使用#pragma comment(lib, "ws2_32.lib")来实现。
在服务器端(server.cpp)中,需要进行套接字的绑定操作。可以使用sockaddr_in结构体来指定套接字的IP地址和端口号,并使用bind函数将套接字与IP地址绑定:
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockAddr.sin_port = htons(1234);
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
在客户端端(client.cpp)中,需要向服务器发送请求。可以使用connect函数将套接字与服务器的IP地址和端口号连接起来:
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockAddr.sin_port = htons(1234);
connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
接下来,在客户端(client.cpp)中,可以使用循环来接收服务器端传回的消息。使用recv函数接收数据,并将接收到的数据转换为string类型进行处理。如果接收到的数据是"exit",则表示对方关闭了Socket,程序需要退出。否则,可以输出接收到的数据。
while (true) {
char szBuffer\[MAXBYTE\] = { 0 };
int can = recv(sock, szBuffer, MAXBYTE, NULL);
string buffer = szBuffer;
if (buffer == "exit") {
printf("对方关闭了Socket。\n");
closesocket(sock);
WSACleanup();
system("pause");
exit(0);
}
printf("从server接收到的数据: %s\n", buffer.size() > 2 ? buffer.substr(1, buffer.size() - 1).c_str() : "");
}
在服务器端(server.cpp)中,也可以使用循环来根据用户输入给客户端传消息。使用send函数将消息发送给客户端。如果用户输入的是"exit",则表示要退出程序。
while (true) {
printf("输入要发送的数据(要退出输入exit):");
string str;
getline(cin, str);
if (str != "exit")
send(clntSock, ("k" + str + "k").c_str(), str.size() + sizeof(char), NULL);
else {
send(clntSock, "exit", 4 + sizeof(char), NULL);
break;
}
}
printf("成功退出!\n");
closesocket(clntSock);
closesocket(servSock);
WSACleanup();
system("pause");
以上是一个简单的C++ Windows Socket套接字程序的示例。通过使用WinSock2.h和ws2_32.lib库文件,可以实现Socket通信功能。
#### 引用[.reference_title]
- *1* *2* *3* [C++ Windows下Socket通信](https://blog.csdn.net/m0_66248056/article/details/128450302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文