18,356
社区成员
发帖
与我相关
我的任务
分享
//这是服务器发送
void UDPSocketServer::Send(DWORD IP, int Port,char str[1000])
{
//绑定本地端口号和IP
SOCKET sockServer = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrServer;
addrServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.104");
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(32550);
int ss = bind(sockServer,(SOCKADDR *)&addrServer,sizeof(SOCKADDR));
//获取客户端信息
/* tempAddr.S_un.S_addr=IP;
strcpy_s(buf,inet_ntoa(tempAddr));
p=(LPCTSTR)buf;*/
SOCKADDR_IN addrClient;
addrClient.sin_addr.S_un.S_addr = inet_addr("192.168.1.104");
addrClient.sin_family = AF_INET;
addrClient.sin_port = htons(32551);
int Byte = sendto(sockServer,str,strlen(str)+1,0,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));
//这是客户端接收
void UDPSocketClient::Receive(DWORD IP, int Port)
{
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrServer;addrServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.104");
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(Port);
int len = sizeof(SOCKADDR);
char recvBuff[256]="";
int Byte = recvfrom(sockClient,recvBuff,256,0,(SOCKADDR *)&addrServer,&len);
}
//这是调用的代码
UDPSocketServer udpS;
udpS.Send(inet_addr("192.168.1.104"),32550, "Server said");
UDPSocketClient udpC;
udpC.Receive(inet_addr("192.168.1.104"),32550);
SOCKADDR_IN addrClient;
addrClient.sin_addr.S_un.S_addr = inet_addr("192.168.1.104");
addrClient.sin_family = AF_INET;
addrClient.sin_port = htons(32551);
int ss = bind(sockClient,(SOCKADDR *)&addrClient,sizeof(SOCKADDR));
我在客户端的receive添加了以上代码,调试时程序卡着了,要一直等么,等了一分钟也没反应。就一直卡在
int Byte = recvfrom(sockClient,recvBuff,256,0,(SOCKADDR *)&addrServer,&len);这一句。
if( 0 > Byte)
{
char str[100];
itoa(WSAGetLastError(),str,10);
}
我在recvfrom函数下面添加了这个if语句,调试时str的值为10022,网上查了说是无效的参数,再怎么办呢,我不知道哪个是无效的参数。