在 Java 中,单个 char 是 16 位,2 个字节。这意味着如果我想向服务器发送一个 UDP 数据包,我必须找到字符串的长度(例如)并乘以 2?
String string = "My awesome string!";
byte[] buff = new byte[ string.length*2 ];
buff = string.getBytes();
...
packet = new DatagramPacket(buff, buff.length, address, port);
socket.send(packet);
UDP数据包限制呢?65k 一包。例如,如果我想向服务器发送数据文件,我必须发送 65/2k 数据!我将 65 分为 2,buff 限制是多少?65/2 还是 65 kb?
例如:
byte[] buff = new byte[ 65000 ]
//file and bufferreader handle
while( ( line = bufferedReader.readLine() ) != null ){
buff = line.getBytes();
packet = new DatagramPacket(buff, buff.length, address, port);
socket.send(packet);
}
我在某处读过我可以发送超过 65k 的数据,因为 IPv4 协议会自动将数据包分成几块,而不是接收器将它们合并。这是真的?
为什么我的缓冲区中有空白?我已经编写了一个客户端和一个服务器应用程序,并且我使用的是 250 大小的缓冲区。如果我要发送一个字,例如“Test”,它有 8 个字节长,我会在“Test”字之后得到一个很长的空白:
byte[] buff = new byte[250];
packet = new DatagramPacket(buff, buff.length);
socket.receive(packet);
System.out.println("GET: " + buff);
控制台说:
获取:测试.................................................. ......................
(点代表空白)