UDP编程作业,求高人帮忙。~~~!!!2个星期。~
最好的方式是查jdk,看有DatagrAMPacket和DatagramPacket什么方法。
本回答由提问者推荐
C++的UDP编程,设置广播地址为255.255.255.255,广播不出去
看起来不像是代码有错而更像这两台机器的设置有问题。几个问题:
1、从别的机器上发出的广播,这两台机器能收到吗?
2、从这两台机器向255.255.255.255发广播,如果在它们上面运行wireshark,能抓到UDP包吗?
3、这两台机器的网卡没有被设成promiscuousmode吧?
4、把这两台机器的网卡和其他工作的机器的网卡换了看看什么结果?
5、如果你的机器跑windows7,可以在这两台机器和其他机器上用windowsnetworkandconnectioncenter里面自带的networkmap看看各台机器之间是怎样连接的。
更多追问追答
1、别的机器发的255.255.255.255,这俩机器是能收到的,但是这俩的255是发不出去的。2、抓不到UDP包。
3、这不是在linux下的吗,不懂怎么设。。能教下命令不。4、换不了网卡。不过在这俩机子上运行的虚拟机,是可以发送和接收的。
5、找不到那软件。
1、看来这俩机器和外面是连接着的。
2、wireshark抓不到说明你的包根本没有到达网卡的硬件,在那之前就丢了。
3、不是要你设这种状态,只要你看看你的那两台机器会不会收到根本不是发给它们的包??不过看来可能性不大。
4、如果虚拟机可以运行,说明网卡本身也是好的。
5、那软件linux下确实没有。
UDP本身在layer4。下面就是找问题出在layer3还是layer2了。用netstat-r看看路由表的设置,再用ifconfig-a看看网卡的设置,相当可能问题是出在路由表上面。
谢谢你了!忘了说了我的是win7的系统了。问题机子的ip:192.168.4.43,在这个机子上setsockopt的返回值是1,不是0!(成功了才返回0,同样代码其他的可用的机子都能返回0)
下面是它的路由表和ipconfig的图片。
机子的网卡设置ipconfig-aLL,还有几个虚拟机的没截图出来。
下面是一台正常机子(IP192.168.4.43)的路由表:
再次谢谢你!
setsockopt失败了的话,WSAGetLastError()返回什么错误代码?
另,能不能把那个网关为192.169.55.1的路由加到问题机器的路由表上?
不好意思,这几天忙其他项目去了就没回复。WSAGetLastError是那天我注释掉了一行代码才出错的,搞错了哇不好意思。
本身的程序没有错哇!是那该死的虚拟机!把虚拟网卡都给禁用了就能正常使用了!