我试图通过BufferedReader和Buffered Writer建立客户端/服务器套接字连接,但读者没有阅读任何内容,只是被挂起,客户端发送和刷新正常。 服务器不会抛出任何异常,就像客户端没有向服务器发送任何内容一样。
我的脑袋会爆炸......
我对客户端和服务器使用相同的内容:
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
以下是服务器的代码:
//inside of try catch
while(true){
while(!in.ready())// just to debug
System.out.println("READY: " + in.ready()); //just to debug
System.out.println("READY: OK"); //just to debug
msg = receive().toString(); //hangs here...
System.out.println("KEYIS: " + msg);
///some stuff to do ....
public StringBuilder receive() throws IOException {
StringBuilder str = new StringBuilder();
int tmp;
while(true){
tmp = in.read();
if(tmp == 0)
break;
else if(tmp == -1)
throw new IOException();
str.append((char)tmp);
}
return str;
}
客户端代码:不要挂在这里
//inside of try catch
send(KEY); //sended properly, no exception
while(true){
send(KEY); // sended properly, no exception
System.out.println("sent");
//System.out.println(receive().toString());
}
public void send(String str) throws IOException{
out.write(str + "\n"); //
//out.newLine(); //tried too, not helped
out.flush(); //push message to server
}
答案 0 :(得分:1)
服务器等待if(tmp == 0)
0
是{n},客户端永远不会发送它。
我想你在等\n
它不是0,它是10(换行)。
只是想知道为什么不使用DataOutputStream#writeUTF()
和DataInputStream#readUTF()
?
答案 1 :(得分:1)
你正在写行,但是你有一个非常毫无意义,精心设计且非常错误的输入法,它实际上并不读取行,并且在流的末尾会抛出错误的异常。
尝试BufferedReader.readLine()
,不要忘记测试null。
答案 2 :(得分:1)
LEAD()
答案 3 :(得分:0)
解决了问题......这么愚蠢的错误......我只是忘了添加一个\ 0来确定消息的结束,所以收到的方法正在等待,好像有更多的数据要来......