Java 服务器接受套接字,但在此之后套接字无法接收任何内容
在构建客户机-服务器聊天程序时,我遇到了一个非常奇怪的问题(因为这以前一直有效) serversocket毫无问题地接受客户端的传入连接,但当我尝试从套接字的inputstream读取时,整个方法都会阻塞,只有在我关闭客户端的套接字时才会释放 我甚至在docs.oracle.com上用示例代码进行了尝试,但问题仍然存在 有人能指出我明显没有看到的错误吗 服务器代码:Java 服务器接受套接字,但在此之后套接字无法接收任何内容,java,sockets,client-server,Java,Sockets,Client Server,在构建客户机-服务器聊天程序时,我遇到了一个非常奇怪的问题(因为这以前一直有效) serversocket毫无问题地接受客户端的传入连接,但当我尝试从套接字的inputstream读取时,整个方法都会阻塞,只有在我关闭客户端的套接字时才会释放 我甚至在docs.oracle.com上用示例代码进行了尝试,但问题仍然存在 有人能指出我明显没有看到的错误吗 服务器代码: public class Server { /** * @param args the command line argume
public class Server {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
System.out.println("Creating server socket");
ServerSocket internetSocket = new ServerSocket(60000);
if(!internetSocket.isClosed()) {
while(true) {
Socket s = internetSocket.accept();
System.out.println("accepted socket!");
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
}
客户端代码:
public class Client {
public static void main(String[] args) throws IOException {
Socket s = null;
try {
s = new Socket("localhost", 60000);
} catch (UnknownHostException ex) {
Logger.getLogger(Start2.class.getName()).log(Level.SEVERE, null, ex);
}
PrintWriter outStream = new PrintWriter(s.getOutputStream());
for(int i=0; i<10; i++) {
outStream.println("test");
System.out.println("Sending the message \"test\"");
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Start2.class.getName()).log(Level.SEVERE, null, ex);
}
}
s.close();
}
}
公共类客户端{
公共静态void main(字符串[]args)引发IOException{
套接字s=null;
试一试{
s=新套接字(“本地主机”,60000);
}捕获(未知后异常除外){
Logger.getLogger(Start2.class.getName()).log(Level.SEVERE,null,ex);
}
PrintWriter outStream=新的PrintWriter(s.getOutputStream());
对于(int i=0;i方法readLine()
正在等待\n字符出现在流中(方法阻塞,直到看到结束行delimeter)
尝试从客户端发送“test\\n”
,看看会发生什么
请记住flush()
客户端的输出流在创建printwriter时,您忘了添加一个true作为第二个参数
它将使其自动刷新。感谢您的快速响应,但没有发生任何变化。请确保您将内容刷新()到输出流中哈!不知怎的,添加了flush()就成功了!知道为什么它不会自动刷新吗?我猜printwriter初始化?嗯……我不确定它为什么要刷新()自动:)抱歉,但我不能同时接受两个答案;-)我也在PrintWriter中看到了额外的构造函数参数。我想我写代码的速度太快了。无论如何,我也感谢您指出这一点!
new PrintWriter(s.getOutputStream(), true);