1 つのサーバーを使用して複数のクライアント間でチャットできるように、Java でアプリケーションを設計しました。UDP ソケットとマルチスレッドを使用しました。それについていくつか質問がありました:
クライアント側のコード:
private void sendMessage(String s) throws Exception
{
byte b[] = s.getBytes();
InetAddress address = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(b, b.length, address, PORT);
socket.send(packet);
}
ここの回答によると:(誤解していないことを願っています)getLocalHost()メソッドはlocalhostループバックアドレスを返す必要があります。ただし、ネットワークに接続しているため、192.xxx.xx.xx が返されます。私は正しいですか?
送信されたパケットを処理するサーバー側のコードは次のとおりです。
byte[] b = new byte[1024];
while (true)
{
try
{
Arrays.fill(b, (byte)0);
DatagramPacket packet = new DatagramPacket(b, b.length);
socket.receive(packet);
String content = new String(b, 0 , b.length);
InetAddress clientAddress = packet.getAddress();
int clientPort = packet.getPort();
String id = clientAddress.toString() + ":" + clientPort;
id を印刷すると、 : が表示され/192.168.56.1:64372 : GREETINGS
ます。しかし、ポートはクライアント側からパケットを送信したものである必要があります。そうでない場合、何が間違っていますか? 最後に、いくつかのパケットが送信された後、例外が発生します: java.lang.StringIndexOutOfBoundsException: String index out of range: 1046
1024 サイズのバイト配列が原因ですか? 前もって感謝します :]