gpt4 book ai didi

Java - 套接字在客户端断开连接之前不会读取?

转载 作者:行者123 更新时间:2023-12-02 08:10:18 26 4
gpt4 key购买 nike

所以我用Java制作了带有套接字的服务器和客户端。我试图让服务器从套接字读取/写入,但它仅在客户端断开连接后读取:

        System.out.println("Server initialized");
clientSocket = server.accept();
System.out.println("Client connected");

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

for(int loop = 0;loop<5;loop++){
out.write("Hello");
System.out.println(in.readLine());
} //end for

问题是,一旦客户端连接,它会显示“客户端已连接”,但随后它不会运行 for 循环。然而,一旦客户端断开连接,服务器就会执行 for 循环并返回

null
null
null
null
null

我在这里缺少什么?这是我的完整服务器代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public ServerSocket server;

public Server(int port){
try {
server = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Cannot bind to port: "+ port);
System.exit(-1);
}

} //end constructor

public void WaitForClient() throws IOException{
Socket clientSocket = null;

try {
System.out.println("Server initialized");
clientSocket = server.accept();
System.out.println("Client connected");

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

for(int loop = 0;loop<5;loop++){
out.write("Hello");
System.out.println(in.readLine());
} //end for

} //end try
catch (IOException e) {
System.out.println("Accept failed");
System.exit(-1);
} //end catch

clientSocket.close();
server.close();

} //end method

} //end class

(我的主要方法是从另一个类调用的。)

最佳答案

如果你想立即看到结果,你必须刷新服务器上的流。流在 close() 上自动刷新,这就是您看到输出的原因。

关于Java - 套接字在客户端断开连接之前不会读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com