ピア IP アドレスのリストを格納する単純な Java チャット サーバーを作成する必要があります。メッセージを送信するときは、各アドレスをループして各ピアに送信する必要があります。これが私のコードです:
import java.util.*;
import java.net.*;
import java.io.*;
class ChatServer{
static LinkedList<String> peerList;
static int port;
private final static int PACKETSIZE = 100;
public static void main(String args[]){
peerList = new LinkedList<String>();
peerList.add("127.0.0.1");
peerList.add("192.168.0.100");
try{
InetAddress inetAddress = InetAddress.getLocalHost();
port = Integer.parseInt(args[0]);
DatagramSocket clientSocket = new DatagramSocket(port, inetAddress);
BufferedReader br = (new BufferedReader(new InputStreamReader(System.in)));
String msg;
byte[] sendData = new byte[PACKETSIZE];
byte[] receiveData = new byte[PACKETSIZE];
while(true){
System.out.println("Enter your message: ");
msg = br.readLine() + "\r\n";
sendData = msg.getBytes();
itr = peerList.listIterator(0);
while (itr.hasNext()){
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, inetAddress.getByName(itr.next().toString()), port);
clientSocket.send(sendPacket);
}
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length, inetAddress, port);
clientSocket.receive(receivePacket);
System.out.println("FROM:" + receivePacket.getAddress() + ":" + new String(receivePacket.getData()));
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
ご覧のとおり、localhost とローカル IP アドレスで試してみたところ、次のメッセージが表示されました。
"Cannot assign requested address: Datagram send failed".
問題はローカルホストにあることがわかりました。それを取り出すと、メッセージがローカルアドレスに送信されるようです。etc/hosts ファイルを確認して再確認しましたが、localhost は正しく構成されています (例: " 127.0.0.1 localhost
")。コンソールは間違いなく管理者として実行されています。ファイアウォールを無効にして試してみたので、そうではありません。
誰がこれを引き起こしているのか知っていますか?