Java 为什么服务器套接字不继续?

Java 为什么服务器套接字不继续?,java,sockets,stream,Java,Sockets,Stream,我的大学工作应用程序 文件至PDF == 我的服务器: 每个申请一个线程 server = new ServerSocket(5000); while (true) { Socket cliente = server.accept(); Thread thread = new Thread(new Requisitor(cliente)); thread.start(); }

我的大学工作应用程序

文件至PDF

==

我的服务器:

每个申请一个线程

        server = new ServerSocket(5000);

        while (true) {
            Socket cliente = server.accept();
            Thread thread = new Thread(new Requisitor(cliente));
            thread.start();
        }
我的类请求器(运行方法)

但是没有调用receive()方法。。仅当我断开客户端套接字时

我的客户端套接字:

    Client cliente = new Client();
    cliente.connect();
    cliente.send(); // send doc binary

    boolean flag = true;

    while (flag) {
        if(!cliente.streamIsEmpty()){ // wait for conversion
            cliente.receive(); // receive pdf
            flag = false;
        }
    }


    cliente.disconect()
我的接收方法

        InputStream in = cliente.getInputStream();
        BufferedInputStream stream = new BufferedInputStream(in);
        FileOutputStream out = new FileOutputStream("docs/"+cliente.getInetAddress().getHostAddress()+".doc");

        byte[] buffer = new byte[1024];
        int length = 0;

        while((length = stream.read(buffer, 0, 1024)) != -1) {
            out.write(buffer, 0, length);
        }

        out.flush();
        stream.close();

有什么想法吗(

在这里,直到读取流返回-1为止。套接字关闭时会发生这种情况。尝试在cliente.send()中关闭OutputStream(而不是整个套接字),然后在它写入文档

    while((length = stream.read(buffer, 0, 1024)) != -1) {
        out.write(buffer, 0, length);
    }

您的问题不清楚。看起来您有两个名为receive的方法(一个在客户端,一个在服务器中)。您说“没有调用receive()方法”,但您没有说哪个方法没有被调用

但有一点绝对是错误的:

boolean flag = true;
while (flag) {
    if (!cliente.streamIsEmpty()) { // wait for conversion
        cliente.receive(); // receive pdf
        flag = false;
    }

您的代码正忙着等待,这很糟糕。此外,哪里不需要这样等待。只需调用
cliente.receive()
…将被阻止,直到有东西到达…或服务器断开连接。

+1-如果他的客户端代码没有关闭其输出流,这肯定可以解释问题。此外,我注意到,在等待响应时,您..cliente.streamIsEmpty(){//等待转换cliente.receive()-这应该是不必要的。调用stream.read(buffer)将阻塞,直到服务器开始发送数据。关闭输出流也会关闭套接字。没有关闭输出流…(不是整个套接字)之类的事情。没有答案。
boolean flag = true;
while (flag) {
    if (!cliente.streamIsEmpty()) { // wait for conversion
        cliente.receive(); // receive pdf
        flag = false;
    }