Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基本网络客户端中的意外输出_Java_Eclipse_Sockets_Loops_Networking - Fatal编程技术网

Java 基本网络客户端中的意外输出

Java 基本网络客户端中的意外输出,java,eclipse,sockets,loops,networking,Java,Eclipse,Sockets,Loops,Networking,所以我只是在玩Java中的网络,这是一个基本客户端的脚本,但由于某种原因,当我在服务器上运行它时,我得到了奇怪的输出: import java.io.*; import java.net.*; public class BankClient { public static void main(String[] args) throws IOException { String host = "192.168.1.100"; int port = 733

所以我只是在玩Java中的网络,这是一个基本客户端的脚本,但由于某种原因,当我在服务器上运行它时,我得到了奇怪的输出:

import java.io.*;
import java.net.*;

public class BankClient {
    public static void main(String[] args) throws IOException { 
        String host = "192.168.1.100";
        int port = 7331;

        try(
            Socket bankSocket = new Socket(host, port);
            PrintWriter out = new PrintWriter(bankSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(bankSocket.getInputStream()));
        ) {
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String fromServer;

            boolean clientRunning = true;
            while(clientRunning) {
                System.out.println("TEST1");
                while((fromServer = in.readLine()) != null) {
                    System.out.println(fromServer);
                    System.out.println("TEST2");
                }
                System.out.println("TEST3");
            }
        } catch (UnknownHostException e) {
            System.err.println("Unknown host " + host);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Disconnected");
            System.exit(1);
        }
    }
}
程序仍在运行,但输出在此停止。让我困惑的是TEST3并没有像我预期的那样连续输出。似乎
while((fromServer=in.readLine())!=null)
在两次迭代后会像应该的那样中断,但while循环运行后不会中断。
while(clientRunning)
没有中断,因为程序仍在运行,但它也没有迭代,因为TEST3没有被输出。那么这里发生了什么

TEST1
Server Message 1
TEST2
Server Message 2
TEST2
每次调用.readLine())中的
,您都在等待服务器响应的到来

根据您的结果,服务器仅向客户机传递了2个数据包,因此提供了两个结果,并将返回读取服务器的下一个输入流,并等待响应,直到服务器关闭或在客户机的套接字中添加socketTimeout

每次调用.readLine())
中的
,您都在等待服务器响应的到来

根据您的结果,服务器仅向客户机传递了2个数据包,因此提供了两个结果,并将返回读取服务器的下一个输入流,并等待响应,直到服务器关闭或在客户机的套接字中添加socketTimeout

每次调用.readLine())
中的
,您都在等待服务器响应的到来

根据您的结果,服务器仅向客户机传递了2个数据包,因此提供了两个结果,并将返回读取服务器的下一个输入流,并等待响应,直到服务器关闭或在客户机的套接字中添加socketTimeout

每次调用.readLine())
中的
,您都在等待服务器响应的到来

根据您的结果,服务器仅向客户机传递了2个数据包,因此提供了两个结果,并将返回读取服务器的下一个输入流,并等待响应,直到服务器关闭或在客户机的套接字中添加socketTimeout

如果您使用
while((fromServer=in.readLine())!=null)
您的程序将在打印
TEST2
后等待输入。另外,
TEST3
在循环外部输出,因此它仅在服务器停止发送消息时才会输出,即
(fromServer=in.readLine())==null

您如何更改此选项:

 but it also isn't iterating because TEST3 isn't being outputted
对这样的事情:

while((fromServer = in.readLine()) != null) {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
然后,您可以使用以下测试用例测试代码:

while((fromServer = in.readLine()) != "EXIT") {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
另外,我强烈建议您使用
java.util.Scanner
来读取流

希望我能提供帮助。

如果您使用
while((fromServer=in.readLine())!=null)
您的程序将在打印
TEST2
后等待输入。另外,
TEST3
在循环外部输出,因此它仅在服务器停止发送消息时才会输出,即
(fromServer=in.readLine())==null

您如何更改此选项:

 but it also isn't iterating because TEST3 isn't being outputted
对这样的事情:

while((fromServer = in.readLine()) != null) {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
然后,您可以使用以下测试用例测试代码:

while((fromServer = in.readLine()) != "EXIT") {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
另外,我强烈建议您使用
java.util.Scanner
来读取流

希望我能提供帮助。

如果您使用
while((fromServer=in.readLine())!=null)
您的程序将在打印
TEST2
后等待输入。另外,
TEST3
在循环外部输出,因此它仅在服务器停止发送消息时才会输出,即
(fromServer=in.readLine())==null

您如何更改此选项:

 but it also isn't iterating because TEST3 isn't being outputted
对这样的事情:

while((fromServer = in.readLine()) != null) {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
然后,您可以使用以下测试用例测试代码:

while((fromServer = in.readLine()) != "EXIT") {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
另外,我强烈建议您使用
java.util.Scanner
来读取流

希望我能提供帮助。

如果您使用
while((fromServer=in.readLine())!=null)
您的程序将在打印
TEST2
后等待输入。另外,
TEST3
在循环外部输出,因此它仅在服务器停止发送消息时才会输出,即
(fromServer=in.readLine())==null

您如何更改此选项:

 but it also isn't iterating because TEST3 isn't being outputted
对这样的事情:

while((fromServer = in.readLine()) != null) {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
然后,您可以使用以下测试用例测试代码:

while((fromServer = in.readLine()) != "EXIT") {
    System.out.println(fromServer);
    System.out.println("TEST2");
}
另外,我强烈建议您使用
java.util.Scanner
来读取流


希望我能帮上忙。

传递一个字符串(令牌),例如STOP,以标识服务器已发送所有数据并退出while循环。客户端和服务器之间应该有一个通信协议来进行通信<.readLine()中的code>in
是一个阻塞语句,它等待服务器的下一行。可能服务器没有关闭连接-因此客户端不知道不会有更多数据。您正在等待服务器发送另一条消息,该消息阻塞了主Threadi现在明白了,如果你们中有人能把它放在一个答案中,我会接受的。说真的,使用
java.utils.Scanner
而不是所有这些缓冲区。传递一个字符串(令牌),比如STOP,以标识服务器已经发送了所有数据,并且从while循环中出来。客户端和服务器之间应该有一个通信协议来进行通信<.readLine()中的code>in是一个阻塞语句,它等待服务器的下一行。可能服务器没有关闭连接-因此客户端不知道不会有更多数据。您正在等待服务器发送另一条消息,该消息阻塞了主Threadi现在明白了,如果你们中有人能把它放在一个答案中,我会接受的。说真的,使用
java.utils.Scanner
而不是所有这些缓冲区。传递一个字符串(令牌),比如STOP,以标识服务器已经发送了所有数据,并且从while循环中出来。应该有