Server 收不到消息!!!!!//
// UDP Server
//#include "stdafx.h"
#include <Winsock2.h>int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;
WORD wVer;
WSADATA wsaData;
sockaddr_in sain, sact;
char buff[256] = {0};
int ilen1, ilen2, iRet;
HANDLE hRead, hEvents[1]; wVer = MAKEWORD(2, 2); WSAStartup(wVer, &wsaData); s = socket(AF_INET, SOCK_DGRAM, 0);
if( s == INVALID_SOCKET )
{
printf("error1\n");
} sain.sin_family = AF_INET;
sain.sin_port   = htons(7777);
//sain.sin_addr.S_un.S_addr = inet_addr("192.168.1.117");
sain.sin_addr.s_addr = INADDR_ANY; //memset(&(sain.sin_zero), 0, 8);
printf("%d, %d, %d\n", s, sizeof(sockaddr_in), sizeof(sockaddr) ); iRet = bind(s, (sockaddr *) &sain, sizeof(sockaddr_in) );
if(iRet == SOCKET_ERROR)
{
printf("error2\n");
} hRead = CreateEvent(NULL, FALSE, FALSE, NULL); WSAEventSelect(s, hRead, FD_READ); hEvents[0] = hRead; while(1)
{
printf("等呀等..., %d\n",s );
WSAWaitForMultipleEvents(1, hEvents, FALSE, INFINITE, FALSE); memset(buff, 0, 256); ilen1 = recvfrom(s, buff, 256, 0, (sockaddr *) &sact, &ilen2); //WSAEFAULT
printf("length=%d, %d, %s\n", ilen1, WSAGetLastError(), buff);
} closesocket(s);

WSACleanup(); return 0;
}
//
// UDP client
//#include "stdafx.h"
#include <Winsock2.h>
#include <string>
using namespace std;int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;
WORD wVer;
WSADATA wsaData;
sockaddr_in sain, sact;
char buff[256] = {0};
int ilen1, ilen2;
string str = "依托是"; wVer = MAKEWORD(2, 2); WSAStartup(wVer, &wsaData); s = socket(AF_INET, SOCK_DGRAM, 0); sain.sin_family = AF_INET;
sain.sin_port   = htons(7777);
sain.sin_addr.S_un.S_addr = inet_addr("192.168.1.117"); memset(&sain.sin_zero, 0, 8); ilen2 = sizeof(sockaddr); ilen1 = sendto(s, str.c_str(), str.length(), 0, (sockaddr *) &sain, ilen2); printf("length=%d, %d, %s\n", ilen1, WSAGetLastError(), str.c_str()); closesocket(s);

WSACleanup(); return 0;
}

解决方案 »

  1.   

    WSAWaitForMultipleEvents(1, hEvents, FALSE, INFINITE, FALSE);
     写这个你想干什么用呀? 没人释放事件她怎么往下走呀?把这个delete了。
    你的recvfrom 本身没有数据来就会堵塞了。
      

  2.   

    cryptonym,楼主是在用事件选择模型!不过好像这个模式用的不对哦,建议楼主还是先从阻塞模型开始吧,用阻塞形式的recvform.