Java:无法读取套接字,线程卡在readLine()

时间:2018-05-24 16:28:32

标签: java sockets stream

这是我的服务器端代码:

@Override
public void run(){
    String message;
    String command;
    String[] arguments;

    try{
        BufferedReader inStream = new BufferedReader(
                                    new InputStreamReader(
                                        clientSocket.getInputStream()));

        while(online){
            message = inStream.readLine();

            if(message == null)
                continue;

            if(message.charAt(0) == '/'){
                int endOfCommandIndex = message.indexOf(' ');
                command = message.substring(1, endOfCommandIndex);
                arguments = message.substring(endOfCommandIndex + 1).split(" ");

                if(command.equals("login")){
                    setUserName(arguments[0]);
                    setName(arguments[0]);

                    sendMessage(this, "Connected");
                }
                //....
          }
     }
}

如标题中所述,线程从Socket的InputStream读取卡住(我使用JDB检查并且它不是条件等待,因为它似乎仍在“运行”)。

我试图在socket上写一行,但它根本不会改变它的状态。我正在尝试构建一个类似聊天的本地应用程序,我对socket和stream很新。提前谢谢。

对于客户方:

String msg;
try{
    while(!((msg = stdIn.readLine()).equals("/quit")))
        toServer.println(msg);
}
catch(IOException e){
    e.printStackTrace();
}

如果有人想要查看我的整个代码,it is here hosted on github

1 个答案:

答案 0 :(得分:0)

看起来消息在写入套接字流后永远不会被刷新。

尝试拨打电话:

toServer.flush();

println之后,或在构建toServer时启用自动刷新:

toServer = new PrintWriter(socket.getOutputStream(), true);