繁体   English   中英

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

[英]Java: cannot read from socket, thread gets stuck on readLine()

这是我在服务器端的代码:

@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进行了检查,这不是有条件的等待,因为它似乎仍在“运行”)。

我试图向套接字写一条线,但它根本没有改变其状态。 我正在尝试构建一个类似于聊天的本地应用程序,而对于套接字和流来说我还是很陌生。 提前致谢。

对于客户端:

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

如果有人想查看我的整个代码, 则将其托管在github上

看起来该消息在写入套接字流后再也不会刷新。

尝试致电:

toServer.flush();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM