Javaでは、1文字は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に分割していますが、バフ制限はどのくらいですか?65/2または65kb?
例えば:
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);
}
IPv4プロトコルは、受信者がパケットをマージするよりも自動的にパケットを分割するため、65kを超えるデータを送信できることをどこかで読みました。これは本当ですか?
バッファに空白が入るのはなぜですか?クライアントとサーバーアプリを作成しましたが、250サイズのバッファーを使用しています。たとえば、8バイトの長さの「Test」という単語を送信すると、「Test」という単語の後に非常に長い空白が表示されます。
byte[] buff = new byte[250];
packet = new DatagramPacket(buff, buff.length);
socket.receive(packet);
System.out.println("GET: " + buff);
そしてコンソールは言う:
GET:テスト..............................................。 ...............................。
(ドットは空白を表します)