[英]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>();
这里arraySocket
是Socket
的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.