繁体   English   中英

如何在Java中将对象发送到socket数组

[英]How to send an object to array of socket in Java

例:

ArrayList arraySocket=new ArrayList();
...
arraySocket.add(client);
...
for (Object arraySocket1 : arraySocket) {
      DataOutputStream dataToClient = new DataOutputStream(arraySocket1.getOutputStream()); // it's wrong. But i don't know how to correct it.
      dataToClient.writeBytes(cData.getData()+"\n");
}

你需要使用泛型。

ArrayList<Socket> arraySocket = new ArrayList<>(); // works in Java 7 and above

ArrayList<Socket> arraySocket = new ArrayList<Socket>(); // for versions 6 and below

我假设List中的Object类型是Socket 然后你需要在for循环中使用正确的类型:

for (Socket arraySocket1 : arraySocket) {

ArrayList是原始类型,您需要对其进行参数化。

我想你想要做以下事情:

ArrayList<Socket> arraySocket = new ArrayList<Socket>();

这里arraySocketSocket的ArrayList(即arraylist只包含Socket类型的元素)。

要通过输出流发送内容,您可以在for循环中执行以下操作:

for (int i = 0; i < arraySocket.size(); i++) {
      DataOutputStream dataToClient = new DataOutputStream(arraySocket.get(i).getOutputStream()); // Get the i'th outputstream
      dataToClient.writeBytes(...); // Write your data
}
    ArrayList<Socket> arraySocket=new ArrayList<>();
    //... arraySocket.add(socket);...
    for (int i = 0; i < arraySocket.size(); i++){
        DataOutputStream dataToClient = new DataOutputStream(arraySocket.get(i).getOutputStream()); // Get the i'th outputstream
        dataToClient.writeBytes(...); // Write your data
    }

首先,我建议你使用Generics,如下所示:

ArrayList<Socket> arraySocket = new ArrayList<Socket>();

现在,您可以使用以下代码遍历数组中的套接字:

for(Socket socket: arraySocket){
   DataOutputStream dataOutput newDataOutputStream(socket.getOutputStream());
//write data with the dataOuput.
}

但是当你想要多次写入数据时会出现问题,如果你从1个套接字创建2个输出流并且它们同时写入会产生异常,那么最好用所有套接字创建第二个数组列表输出流(或地图)并写入那些。

例:

//the array list with sockets
ArrayList<Socket> arraySocket = new ArrayList<Socket>();

ArrayList<OutputStream> outputStreams = new ArrayList<OutputStream>();

//save the output streams
for(Socket socket: arraySocket){
    outputStreams.add(socket.getOutputStream);
}


//to write to the sockets use this
for(OutputStream output: outputStreams){
     //write data to the output.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM