【发布时间】:2018-05-24 16:28:32
【问题描述】:
这是我的服务器端代码:
@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();
}
如果有人想查看我的整个代码,it is here hosted on github
【问题讨论】:
-
"一行被认为是由换行符('\n')、回车符('\r')、回车符后跟换行符中的任何一个终止,或通过到达文件结尾 (EOF)。";正在发送一个吗?
-
@JacobG。是的,我想是的。我正在使用 println() 方法连接到客户端套接字的输出流的 PrintWriter 写入套接字。是的。我猜
-
感谢@RannLifshitz 的修订!
-
@EnricoMarconi 非常欢迎您。也可以随意为 StackOverflow 做出贡献。