2012-10-23 62 views
3

我使用的老同学java.net.SocketBufferedReader上的Java客户端套接字阻塞?

我的客户端连接到服务器并执行:

BufferedReader in = 
    new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
String fromServer = in.readLine(); 

它挂在in.readLine()。

我的服务器接受来自客户端的连接并执行:

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
out.print("Hello client\n"); 

我的预期是,一旦的out.print(“你好客户端\ n”);被调用,客户端应该停止阻塞并继续。

我做错了什么?

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

回答

3

我猜你是不是要求out.flush();PrintWriter.flush

Javadoc

自动刷新 - 一个布尔值;如果为true,println的,printf或format方法将刷新输出缓冲区

所以Autoflush不会为print工作,你将需要调用flush()码的手动

+0

autoflush已设置PrintWriter构造函数。 – dublintech

+1

@dublintech print没有列出autoflush的命令 –

+1

具体来说,'autoFlush - 一个布尔值;如果为true,则println,printf或format方法将刷新输出缓冲区。这是从AmitD在PostWriter发布的链接中引用的。 – kurtzbot

2

要调用out.print("Hello client\n"),这是不自动刷新,当你应该呼叫out.println("Hello client"),这是自动刷新。