如何解决UDP协议网络传输

我们的系统使用UDP协议无连接传输,但qnx下UDP协议的传输包最大1000多个字节,而我们的每包数据可能大于这个数,需要分包传输。可是在window下传输不需要处理传输包的大小(小于65535byte)。请问qnx下能不能做到和windows以样的程序?

为什么“QNX下UDP协议的传输包最大1000多个字节”?

使用UDP协议,发送数据sendto函数,如果发送的字节数超出1000多点,忘了具体数字了,发送就报告错误,对方收到的数也不对。看过tcp/ip协议,好像上面就这么说的,支持最大1000多个字节。

#ping -s 2000 192.168.0.255
PING 192.168.0.255(192.168.0.255) :2000 data bytes
ping :sendto:Message too long
ping :sendto:Message too long
ping :sendto:Message too long
ping :sendto:Message too long
ping :sendto:Message too long
ping :sendto:Message too long

我试了一下.并没有这样的问题.
#ping -s 2000 192.168.80.1
PING walker (192.168.80.1): 2000 data bytes
2008 bytes from 192.168.80.1: icmp_seq=0 ttl=255 time=3 ms
2008 bytes from 192.168.80.1: icmp_seq=1 ttl=255 time=2 ms
2008 bytes from 192.168.80.1: icmp_seq=2 ttl=255 time=2 ms

----walker PING Statistics----
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 2/2/3 ms variance = 2 ms^2

也许你可以用getsockopt()看一下SO_SNDBUF的值是多少.

IP4 的数据包最大应该是65535 = 2^16
UDP相关的另外两个参数应该是MTU,和SO_SNDBUF了.

我采用的时广播模式,向192.168.0.255 发送数据,出现报文太长的提示,一一发送没有。
如果想用广播命令,该怎么处理呀?

根据UNIX的传统做法,广播是不会做分包传输的.这是策略上的一个选择.我相信QNX也是继承这样的做法.

要怎么处理可能要看你的实际情况了.
不知道多播的情况如何?也许你可以去证实一下.

多播什么设置?
从那里开始

我试了一下,丢包比较严重啊, 这是怎么回事阿, 谢谢

ping -s 1000 192.168.16.202

PING 192.168.16.202 (192.168.16.202): 1000 data bytes
1008 bytes from 192.168.16.202: icmp_seq=3 ttl=255 time=1 ms
1008 bytes from 192.168.16.202: icmp_seq=4 ttl=255 time=1 ms
1008 bytes from 192.168.16.202: icmp_seq=13 ttl=255 time=1 ms

----192.168.16.202 PING Statistics----
21 packets transmitted, 3 packets received, 85.7% packet loss
round-trip min/avg/max = 1/1/1 ms variance = 0 ms^2

你试的是什么呀.网络不好吧.

就是自己内部的网的,通过路由器,交换机,交换机下面接的几台机器,可以上外网。是不是哪里的设置不对,导致不可靠啊!