相关疑难解决方法(0)

什么会导致UDP数据包被发送到localhost时被丢弃?

我正在发送非常大(64000字节)的数据报.我意识到MTU远小于64000字节(典型值大约是1500字节,来自我的阅读),但我怀疑会发生两件事之一 - 要么没有数据报就能通过(所有大于1500字节)会被静默删除或导致抛出错误/异常)或64000字节数据报将被分成大约43个1500字节的消息并透明地传输.

从长远来看(2000 + 64000字节数据报),数据报的大约1%(即使是LAN似乎异常高)也会被丢弃.我可能期望通过网络,数据报可能无序到达,被丢弃,过滤等等.但是,在localhost上运行时我没想到这一点.

是什么导致无法在本地发送/接收数据?我意识到UDP是不可靠的,但我没想到它在localhost上如此不可靠.我想知道它是否只是一个时间问题,因为发送和接收组件都在同一台机器上.

为了完整起见,我已经包含了发送/接收数据报的代码.

发送:

DatagramSocket socket = new DatagramSocket(senderPort);

int valueToSend = 0;

while (valueToSend < valuesToSend || valuesToSend == -1) {
    byte[] intBytes = intToBytes(valueToSend);

    byte[] buffer = new byte[bufferSize - 4];

     //this makes sure that the data is put into an array of the size we want to send
    byte[] bytesToSend = concatAll(intBytes, buffer);

    System.out.println("Sending " + valueToSend + " as " + bytesToSend.length + " bytes");

    DatagramPacket packet = new DatagramPacket(bytesToSend,
                        bufferSize, …
Run Code Online (Sandbox Code Playgroud)

java udp network-programming

21
推荐指数
1
解决办法
3万
查看次数

即使在本地运行进程,为什么我的UDP数据报也无序?

我正在开发流媒体服务器和Flash客户端之间的Java接口.我注意到即使两个进程都在本地运行,UDP数据报也可能无序到达我的接口.

这是正常的吗?我认为,因为没有数据报必须经过任何路由器或任何网络设备,所以不应该发生这种情况.

java udp datagram

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×2

udp ×2

datagram ×1

network-programming ×1