问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
下面是接收端的代码,发送端只有循环发送
#include<Winsock2.h>
#include<iostream>
#include<string>
#include<fstream>
#include<WinSock2.h>
#include<Windows.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
///////////////////////////////////////////////////////
WSADATA wsd; // 初始化Socket的变量
SOCKET s; // 用于通信的Socket句柄
SOCKADDR_IN sRecvAddr,sSendAddr; // 分别为接收地址和发送地址
USHORT uPort = 1401; // 通信端口
int nResult = 0,nSenderAddrSize = sizeof(sSendAddr);
///////////////////////////////////////////////////////
char recvBuf[1024]={0};
int recvlen=1024;
bool SEND=false;
///////////////////////////////////////////////////////
DWORD WINAPI recvThread(LPVOID lpParameter) {
SOCKET s= (SOCKET)lpParameter;
SOCKADDR_IN sRecvAddr,sSendAddr;
int nSenderAddrSize = sizeof(sSendAddr);
while (1) {
if(SEND){
sendto(s, "hello,too", 1024, 0, (sockaddr*)&sSendAddr, 50);
SEND=false;
}
}
system("pause");
return 0;
}
int main() {
// 初始化Socket2.2版本
nResult = WSAStartup(MAKEWORD(2, 2), &wsd);
if (nResult != NO_ERROR)
{
printf("WSAStartup failed:%d\n", WSAGetLastError());
return 1;
}
// 创建一个Socket,SOCK_DGRAM表示UDP类型
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
printf("socket failed:%d\n", WSAGetLastError());
return 1;
}
// 填充Socket接口
sRecvAddr.sin_family = AF_INET; // 地址协议,AF_INET支持TCP和UDP
sRecvAddr.sin_port = htons(uPort); // 通信端口,htons转为网络字节顺序
sRecvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); // 接收任意地址数据
// 绑定Socket至本机
nResult = bind(s, (SOCKADDR *)&sRecvAddr, sizeof(sRecvAddr));
if (nResult != 0){
printf("bind failed:%d\n", WSAGetLastError());
return 1;
}
HANDLE hThread=CreateThread(NULL,0,recvThread,(LPVOID)s,0,NULL);
while(1){
recvfrom(s, recvBuf, recvlen, 0, (SOCKADDR *)&s, &nSenderAddrSize);
cout<<GetLastError()<<endl;
}
closesocket(s);
WSACleanup();
system("pause");
return(0);
}