小弟在同一台机器上跑如下的UDP广播包发送程序和接收程序,结果接收端怎么也收不到~
如果将接收端放置另一台机器上,一切正常~ 请各位给出意见,谢谢!!!// 发送端:
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (sockClient == INVALID_SOCKET)
{
        return;
}

BOOL yes = TRUE;
int ret = setsockopt(sockClient, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
}

SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST); char recvBuf[100];
char sendBuf[100];
 
        int len = sizeof(SOCKADDR);
while(1)
{
gets(sendBuf);

if (sendto(sockClient, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrSrv, len) == SOCKET_ERROR)
{
return;
}
} closesocket(sockClient);
WSACleanup();
// 接收端
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
if (sockSrv == INVALID_SOCKET)
{
return;
} BOOL yes = TRUE;
int ret = setsockopt(sockSrv, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
} SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); if (bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
return;
} char recvBuf[100];
char sendBuf[100];

SOCKADDR_IN addrClient;
memset(&addrClient, 0, sizeof(addrClient));

int len = sizeof(SOCKADDR); while (1)
{
if (recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len) == SOCKET_ERROR)
{
return;
} printf("%s %s\n", inet_ntoa(addrClient.sin_addr), recvBuf); }
closesocket(sockSrv);
WSACleanup();

解决方案 »

  1.   

    有没有设置回环?
    int nLoop = 1;
    nRet = WSAIoctl(
    g_socketLocal, 
    SIO_MULTIPOINT_LOOPBACK, 
    &nLoop,
    sizeof(nLoop),
    NULL,
    0,
    (unsigned long *)&cbRet,
    NULL,
    NULL);
      

  2.   

    自己在顶一下,回环设置还是不行用过EtherPeek抓包工具,发现是能够收到发送的广播包的;并且,在EtherPeek开启的情况下,接收端也能收到发送端的数据,奇怪!还请各位帮忙给出解决办法!
      

  3.   

    没有阿,就一张网卡;本来有2个IP的,后来去掉了其中的一个,就剩下用于与局域网通信的IP了。
      

  4.   

    将IP绑定为具体地址,在本机上可以使"127.0.0.1"或者本机IP,不要用INADDR_BROADCAST或者INADDR_ANY
      

  5.   

    我现在也正想做一个UDP广播发送文件的程序,能发一份源程序我吗?不胜感激!
    邮箱:[email protected]
      

  6.   

    我的情况是在192.168.0.2的机子上跑send.exe的话 只有0.2的机子能收到数据 0.6的机子不行
    而在0.6的机子上跑send.exe的话 俩机子都能收到数据~~~
    这是怎么回事呢??????