Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Client Server - Fatal编程技术网

Java 服务器接受套接字,但在此之后套接字无法接收任何内容

Java 服务器接受套接字,但在此之后套接字无法接收任何内容,java,sockets,client-server,Java,Sockets,Client Server,在构建客户机-服务器聊天程序时,我遇到了一个非常奇怪的问题(因为这以前一直有效) serversocket毫无问题地接受客户端的传入连接,但当我尝试从套接字的inputstream读取时,整个方法都会阻塞,只有在我关闭客户端的套接字时才会释放 我甚至在docs.oracle.com上用示例代码进行了尝试,但问题仍然存在 有人能指出我明显没有看到的错误吗 服务器代码: public class Server { /** * @param args the command line argume

在构建客户机-服务器聊天程序时,我遇到了一个非常奇怪的问题(因为这以前一直有效)

serversocket毫无问题地接受客户端的传入连接,但当我尝试从套接字的inputstream读取时,整个方法都会阻塞,只有在我关闭客户端的套接字时才会释放

我甚至在docs.oracle.com上用示例代码进行了尝试,但问题仍然存在

有人能指出我明显没有看到的错误吗

服务器代码:

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);