这是我的计划的一部分:
boolean bConnected = flase;
DataInputStream dis;
DataOutputStream dos;
List<CLient> clients;
public void send(String str) {
try {
dos.writeUTF(str);
}
catch (IOException e) {
e.printStackTrace();
}
}
-----------------------Part 1--------------------------------
while (bConnected=true) {
System.out.println(dis.readUTF().toString());
for (int i = 0; i < clients.size(); i++) {
Client c = clients.get(i);
c.send(dis.readUTF().toString());}}
------------------Part 2----------------------------------
while (bConnected) {
String str = dis.readUTF();
System.out.println(str);
for (int i = 0; i < clients.size(); i++) {
Client c = clients.get(i);
c.send(str);}}
此程序将消息发送给其他客户端。 只有守则的第二部分有效。我想知道为什么我不能直接使用dis.readUTF() 我想知道原因。
答案 0 :(得分:1)
您的代码段之间的行为存在很大差异。
while (bConnected == true) { /* Note the use of `=` instead of `==` in your question */
System.out.println(dis.readUTF().toString()); // Reads from the input stream
for (int i = 0; i < clients.size(); i++) {
Client c = clients.get(i);
c.send(dis.readUTF().toString()); // Reads from the input stream
}
}
此代码段从外部n + 1
循环的每次迭代中读取输入流dis
中的while
个字符串(n
是clients
中的客户端数量),而你的第二个片段在while
循环的每次迭代中只从输入流中读取一个字符串。
while (bConnected) {
String str = dis.readUTF(); // Reads from `dis`
System.out.println(str);
for (int i = 0; i < clients.size(); i++) {
Client c = clients.get(i);
c.send(str); // uses data read above, doesn't touch `dis`
}
}