-1

我还有一个关于我的推送服务器的问题。由于某种原因,服务器在其生命周期内只接受一个连接。即使在第一个连接关闭后,服务器也不会做任何事情。我怀疑线程没有被生成,因为它没有拒绝连接。

这是服务器的代码:http: //docs.oracle.com/javase/tutorial/networking/sockets/examples/KKMultiServer.java

我使用了这个例子,因为它正是我所需要的。我保持此代码不变。这是我真正使用的线程......

import java.net.*;
import java.io.*;

public class KKMultiServerThread extends Thread {
    private Socket socket = null;

    public KKMultiServerThread(Socket socket) {
            super("KKMultiServerThread");
            this.socket = socket;
    }

    public void run() {
            try {
                    final PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String inputLine, outputLine;
                    out.println("connected");
                    boolean loggedin = false;
                    String username="";
                    String password="";
                    String deviceid="";
                    while (true) {
                    //deal with login handshake
                            if ((inputLine = in.readLine()) == null) inputLine="";
                            if (!loggedin) {
                                   Logs the user in...
                                   Also does things with files and keeps reading and writing to the client...
                    }
                    out.close();
                    in.close();
                    socket.close();
            } catch (IOException e) {
                    e.printStackTrace();
            }
    return;
    }
}

可能出了什么问题?我关闭了套接字和我应该关闭的所有流,但即使那样它仍然应该工作,不是吗?

感谢您一直以来的支持!

4

1 回答 1

4

if ((inputLine = in.readLine()) == null) inputLine="";

这行代码是A级的废话。如果 inputLine 为 null,则对端已关闭套接字,您必须退出循环并自行关闭套接字。目前您正在忽略 EOS 条件并永远循环。

于 2012-12-29T01:55:31.403 回答