本帖最后由 VisualEleven 于 2010-09-07 15:30:04 编辑

解决方案 »

  1.   

    针对255.255.255.255这个地址,实际上是个受限的广播地址,在操作系统上,一般用应用层上的UDP发送,是发不出这个地址的。你可以容易发送一个针对指向网络的广播:192.168.1.255。而实际上,我们也基本用不到4个255地址的广播报文。像ARP、DHCP这样的广播报文,是系统自身的特殊协议数据包。所以不用在应用层上试图发送4个255的受限报文。在一些单片机上,可以直接在发送的原始数据包中填写4个255的地址。你用抓包软件可以看到这些数据包,但是在应用层上,你基本上收不到这些报文。
      

  2.   

    本帖最后由 VisualEleven 于 2010-09-07 15:30:31 编辑
      

  3.   

    你为什么一定要发送255.255.255.255的广播报文呢?有多大的需求?一般发广播是发子网广播报文。
    在带操作系统的单片机中,很难发送这样的报文,因为这样的报文很难从应用层传输到IP层上,这个由协议栈和路由表等限制。很多不带操作系统的单片机是直接对网络接口填写IP地址和各种参数,而底层未对IP协议作严格的处理,所以你可以看到很多255.255.255.255的报文。而255.255.255.255报文一般都是特殊协议来使用的,如ARP、DHCP等。
    而对于255.255.255.255的报文,你的应用软件能看到吗?只有用抓包软件通过在网卡上设置混杂模式,才可以监视到该报文,而普通的这种受限广播报文在协议栈内部自动丢掉了。对于一般的应用,完全没有必要用这种报文。
      

  4.   

    本帖最后由 wenxy1 于 2010-08-18 21:38:39 编辑
      

  5.   


    //每隔3秒钟向端口号5050不断的发送广播数据SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
    BOOL bBroadcast = TRUE;
    setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(bBroadcast));
    SOCKADDR_IN  bcast;
    bcast.sin_family = AF_INET;
    bcast.sin_port = htons(5050);
    bcast.sin_addr.S_un.s_addr = INADDRY_BROADCAST;
    _tprintf(_T("Start send broadcast data...\n"));
    char szText[] = "This is broadcast...";
    while(TRUE)
    {
     sendto(s, szText, strlen(szText), 0, (LPSOCKADDR)&bcast, sizeof(bcast));
     Sleep(3000);
    }
      

  6.   

    见此贴:http://topic.csdn.net/u/20100909/10/084149c8-8ee0-4644-a8fb-ef5219a897d8.html?32963