0

こんにちは、n私が持っているポートの量のリストをループして、それぞれに DatagramSocket を作成したいと思います。

for(int i = 0; i < portList.size(); i++) {
    DatagramSocket socket[i] = new DatagramSocket();
    socket[i].connect(InetAddress.getLocalHost(), portList.get(i));
}

を使用してはいけないことはわかっていますsocket[i]。私が言いたいことを表現するだけです。上記は次のように生成されます。

DatagramSocket socket1 = new DatagramSocket();
socket1.connect(InetAddress.getLocalHost(), 2000);

DatagramSocket socket2 = new DatagramSocket();
socket2.connect(InetAddress.getLocalHost(), 2001);

DatagramSocket socket3 = new DatagramSocket();
socket3.connect(InetAddress.getLocalHost(), 2002);

DatagramSocket socket4 = new DatagramSocket();
socket4.connect(InetAddress.getLocalHost(), 2003);

私はJavaがあまり得意ではないので、これはおそらくばかげた質問です:P

4

3 に答える 3

2

ArrayListソケットを最初に保存するには、多分を使用します。

ArrayList<DatagramSocket> socketList = new ArrayList<DatagramSocket>();
socketList.add(new DatagramSocket());
socketList.add(new DatagramSocket());
socketList.add(new DatagramSocket());
socketList.add(new DatagramSocket());

次に、次をループしますsocketList

for(int i = 0; i < portList.size(); i++) {
    socketList.get(i).connect(InetAddress.getLocalHost(), portList.get(i));
}

これは、同じ数のポートがあり、 に が追加されていることを前提としていDatagramSocketますsocketListNullPointerそれ以外の場合は、ループのどこかでスローされます。

アップデート

user1753100からの解決策:

ArrayList<DatagramSocket> socketList = new ArrayList<DatagramSocket>();
for (int j = 0; j < portList.size(); j++) {
    socketList.add(new DatagramSocket());
}
于 2012-10-18T03:53:23.693 に答える
1

ラッセルの答えはかなり良いです。簡単にまとめると、以下のように書きます。

//get local host
InetAddress localHost = InetAddress.getLocalHost();

//make a List to hold the sockets
//we know how many there will be so use that capacity
List<DatagramSocket> datagramSockets =
        new ArrayList<DatagramSocket>(portList.size());

//for each port,
for (Integer port : portList) {
    //instantiate a new socket
    DatagramSocket datagramSocket = new DatagramSocket();
    //add it to the list
    datagramSockets.add(datagramSocket);
    //connect it using the port
    datagramSocket.connect(localHost, port);
}
于 2012-10-18T04:08:25.903 に答える
0
ArrayList<DatagramSocket> socketList = new ArrayList<DatagramSocket>();

for(int i=0;i<portList.size();i++)

 {
   socketList.add(new DatagramSocket().connect(InetAddress.getLocalHost(), portList.get(i));
}
于 2012-10-18T04:07:44.270 に答える