android,netcat:如何通过UDP发送超过2048字节

时间:2014-06-12 16:30:57

标签: java android udp transfer netcat

我正在尝试通过UDP实现从Notebook(Linux)到Android设备的数据传输。

在我推出的笔记本上:

cat /home/me/my/file.txt | nc -u 192.168.150.3 12345

或者:

nc -u 192.168.150.3 12345 < /home/me/my/file.txt

获得相同的结果。

在Android设备上我的代码是:

byte[] msg = new byte[100000];

DatagramPacket p = new DatagramPacket(msg, msg.length);
DatagramSocket s = new DatagramSocket(portNumber);
s.receive(p);

message = new String(msg, 0, p.getLength());

s.close();

如果我在“message =”的行上设置断点,我可以看到msg.length = 100000.这是对的。但是p.getLength()只有2048.这意味着只传输了一部分数据。我的意思是“消息”不包含“file.txt”中的所有数据。为什么会这样?我做错了什么?

1 个答案:

答案 0 :(得分:1)

nc不会将整个文件发送到单个UDP数据包中,因此不要期望在单个调用中接收它。您必须多次呼叫接收,直到一切都完成。当然,使用UDP,你没有“连接结束”,所以你必须有一些其他指标,你得到了所有数据。并且,UDP数据包可以无声地丢失或重新排序,因此无法保证您以所需的方式获取文件。