我正在尝试通过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”中的所有数据。为什么会这样?我做错了什么?
答案 0 :(得分:1)
nc不会将整个文件发送到单个UDP数据包中,因此不要期望在单个调用中接收它。您必须多次呼叫接收,直到一切都完成。当然,使用UDP,你没有“连接结束”,所以你必须有一些其他指标,你得到了所有数据。并且,UDP数据包可以无声地丢失或重新排序,因此无法保证您以所需的方式获取文件。