-1
在我的服務器類中,我必須一次向所有連接的客戶端發送幾條不同數據類型的消息。從服務器向多個客戶端發送多條消息
public class Server() {
private List<ClientT> client = new ArrayList<ClientT>();
private String strValue = "someText";
private int intValue = 20;
private int intValueTwo = 20;
try {
for(int i = 0; i < client.size(); i++) {
client.get(i).output.writeObject(strValue);
client.get(i).output.writeObject(intValue);
client.get(i).output.writeObject(intValueTwo);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
class ClientT extends Thread {
private ObjectOutputStream output;
/* ...
...
... */
}
在我的客戶端類中,我使用了lineNumbers來檢測從服務器發送哪條消息。
ObjectInputStream input;
int lineNo = 0;
String message = " ";
try {
input = new ObjectInputStream(socket.getInputStream());
while(true) {
lineNo++;
message = (Object) input.readObject();
if(lineNo == 1) {
//read first message from the server
}
else if(lineNo == 2) {
//read second message from the server
}
else if(lineNo == 3) {
//read third message from the server
}
} catch (IOException exception) {
System.out.println("Error: " + exception);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
而不是使用行號來標識從服務器類發送的消息,什麼是更好的選擇?
我想給你一個有用的評論,但你的問題是「什麼是更好的選擇?」簡直太寬了 – ControlAltDel 2014-08-28 19:39:38
因爲我覺得我對它進行了硬編碼。如果我有超過3個信息從服務器傳遞到客戶端會怎麼樣?假設我有10個來自服務器的信息。我不想寫if(lineNo == 4)和(line == 5)直到10. – user2935569 2014-08-28 19:43:19
由於您使用的是ObjectInputStream,因此您可以將所需的值放入一個(可序列化的)對象中,發送。 Java會照顧你的訂單。 – 2014-08-28 20:00:47