请问一个小的udp程序recvfrom的问题
程序功能非常简单,就是写一个客户端程序发送给服务器端数据,然后recvfrom;
现在的问题是数据能发送到服务器端,客户端通过抓包软件也每次都能抓到服务器端返回的udp包,端口ip等都正确,
请问为什么我sendto成功,但是recvfrom总是超时呢?而且明明数据是发到我本机上来了。
我曾试着很多种其他方式都是一样的结果,请大侠给指点啊,分数不成问题,不够再加!
---------------------------------------
SOCKET socket1;
InitWinsock();
struct sockaddr_in server;
int len =sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(54321); ///server的监听端口
server.sin_addr.s_addr=inet_addr("192.168.137.101"); ///server的地址 (曾试过专门定一个接收socket,然后用INADDR_ANY代替这个地址,也不行)
socket1=socket(AF_INET,SOCK_DGRAM,0);
//设置接收超时30秒
int TimeOut = 30000;
if( ::setsockopt(socket1,SOL_SOCKET,SO_RCVTIMEO,(char*)&TimeOut,sizeof(TimeOut)) == SOCKET_ERROR )
{
::closesocket(socket1);
WSACleanup( );
}
{ //char buffer[1024]="\0";
if (sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
{
if(recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,&len)!=SOCKET_ERROR)
//printf("rece from server:%s\n",buffer);
AfxMessageBox("成功");
else
{
int n = WSAGetLastError();//5780
int m = n;
//AfxMessageBox("error:%d",n);
}
}
}
closesocket(socket1);