0

这是我的计划的一部分:

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() 我想知道为什么。

4

1 回答 1

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从输入流中读取字符串(其中客户端的数量),而您的第二个代码段在循环的每次迭代中仅从输入流中读取一个字符串。diswhilenclientswhile

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`
    }
}
于 2013-09-15T17:47:21.573 回答