Java socket BufferedReader读取未读取
我试图通过BufferedReader和BufferedWriter建立一个客户机/服务器套接字连接,但读卡器没有读取任何东西,它只是挂起,在那里客户机正确发送和刷新。 服务器不会抛出任何异常,就好像客户端不向服务器发送任何内容一样 我的头要爆炸了 Im对客户端和服务器使用相同的功能:Java socket BufferedReader读取未读取,java,sockets,Java,Sockets,我试图通过BufferedReader和BufferedWriter建立一个客户机/服务器套接字连接,但读卡器没有读取任何东西,它只是挂起,在那里客户机正确发送和刷新。 服务器不会抛出任何异常,就好像客户端不向服务器发送任何内容一样 我的头要爆炸了 Im对客户端和服务器使用相同的功能: in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new Outp
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
}
服务器等待
如果(tmp==0)
即0
为nil,客户端从不发送它。我想您正在等待
\n
它不是0,而是10(换行)。我只是想知道为什么不使用
DataOutputStream#writeUTF()
和DataInputStream#readUTF()
?您正在写行,但您有一个非常无意义、复杂且有缺陷的输入方法,它实际上不读取行,并且在流的末尾抛出错误的异常
尝试
BufferedReader.readLine()
,不要忘记测试null。解决了问题。。。这么愚蠢的错误。。。我忘了添加一个\0来确定消息的结尾,所以Receive方法正在等待,好像有更多的数据来了…为什么要使用BufferedReader?试着删除它,这应该会有帮助。根据下面的海报,这是由打字错误造成的,不可复制。我投票决定结束这个问题。我必须传递可能包含\n\r字符的数据,因此不能使用ReadLine,因此请使用BufferedInputStream.read()
,并且不要使用String
作为二进制数据的容器。\0用于确定数据的结尾,-1表示连接中有错误。将连接到服务器的lua程序无法解析readUTFtoo@Bob否,IOException
表示连接中存在错误-1表示对等方已关闭连接。没有错误。
StringBuffer sb = new StringBuffer();
int i;
while ((i = bi.read()) != -1) {
char c = (char) i;
sb.append(c);
}
return sb.toString();