各位前辈,小弟近日在编写一个使用udp进行广播的动态库程序,广播地址为255.255.255.255。在win2000下开发,在本机上测试没有发现问题,可以正常使用。交给客户使用,客户反映无法使用。经过测试,在比较干净的电脑上确实无法使用,函数出错返回。程序如下;
class UDPSocket : public CAsyncSocket
{
......
}UDPSocket *g_pUDPSocket;//此为全局指针extern "C" int __stdcall  udp_broadcast(SEARCHECHO Proc)
{
int sendlen;
BOOL bBroadcast = true;

g_pUDPSocket->NewDeviceProc = Proc;
g_pUDPSocket->SetSockOpt(SO_BROADCAST, (BOOL*)&bBroadcast, sizeof(BOOL));
sendlen = g_pUDPSocket->SendTo("X", 1, 65535, "255.255.255.255");

if (sendlen == SOCKET_ERROR)
{
return (g_pUDPSocket->GetLastError());
}
else
return(1);
}函数返回10022,表示SendTo使用了一个无效的参数。百思不得其解,不知哪位前辈可以告知?

解决方案 »

  1.   

    查看g_pUDPSocket->SetSockOpt(SO_BROADCAST, (BOOL*)&bBroadcast, sizeof(BOOL));
    有没有返回错误sendlen = g_pUDPSocket->SendTo("X", 1, 65535, "255.255.255.255");将端口号设置小一些试试,65535是最大值了
      

  2.   

    回复 nuaawenlin(飘人)
         不好意思,我公司放假比较早,回家后又不上网,所以就没有及时回复。你给我提的两点建议,
    SetSockOpt(SO_BROADCAST, (BOOL*)&bBroadcast, sizeof(BOOL));
    这个语句我测试过,函数调用没有出错。返回值为成功返回。
    至于将端口号设置小些我没有试过。倒是可以试试。过两天我公司上班,再试试。先谢过了!
      

  3.   

    将端口号改小了也没有效果,还是和原来一样,哪位前辈还有什么好招吗?跟操作系统、winsock版本有没有关系?郁闷中......
      

  4.   

    问题解决了,使用
    int SendTo( const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr, int 
    nSockAddrLen, int nFlags = 0 );
    进行发送数据就完全没有问题.问题来了,我可不知道如何给分了.