这是我的服务器端代码:
@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
答案 0 :(得分:0)
看起来消息在写入套接字流后永远不会被刷新。
尝试拨打电话:
toServer.flush();
在println
之后,或在构建toServer
时启用自动刷新:
toServer = new PrintWriter(socket.getOutputStream(), true);