Java BufferedReader未正确读取数据
我有一个TCP服务器客户端对。客户端有一个线程来处理来自服务器的数据。问题是,在从服务器接收第一个数据之前,缓冲读取器被阻塞。但一旦接收到第一个数据,它就会在有用数据之间继续发送0。有人知道为什么吗?如何解决这个问题Java BufferedReader未正确读取数据,java,input,tcp,stream,bufferedreader,Java,Input,Tcp,Stream,Bufferedreader,我有一个TCP服务器客户端对。客户端有一个线程来处理来自服务器的数据。问题是,在从服务器接收第一个数据之前,缓冲读取器被阻塞。但一旦接收到第一个数据,它就会在有用数据之间继续发送0。有人知道为什么吗?如何解决这个问题 connection = new Socket(ip, port); output = new DataOutputStream(connection.getOutputStream()); input = new BufferedReader(new In
connection = new Socket(ip, port);
output = new DataOutputStream(connection.getOutputStream());
input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
此部分经过修改以处理0,但这并不理想:
try {
opcode = (char) input.read();
} catch (IOException ex) {
ErrorFrame erfframe = new ErrorFrame("De verbinding is verbroken voordat we de opcode van het packet konden lezen", "Herverbinden", IRIGui.ConnectionType);
}
System.out.println("Data received!!" + opcode);
int opcodenr = Character.getNumericValue(opcode);
char sensortype = '0';
try {
do {
sensortype = (char) input.read();
} while (sensortype == 0);
} catch (IOException ex) {
ErrorFrame erfframe = new ErrorFrame("De verbinding is verbroken voordat we de sensortype van het packet konden lezen", "Herverbinden", IRIGui.ConnectionType);
}
服务器代码:
公共静态void main(字符串argv[])引发异常{
ServerSocket welcomeSocket=新的ServerSocket(25566)
}您正在写入32位的整数,在本例中,所有整数都有三个前导零字节,而读取的字符是16位的,因此您读取的每个奇数字符都由两个零字节组成。这没有任何意义。如果使用
writeInt()
进行写入,请使用readInt()
进行读取。所有其他DataInput/OutputStream
方法也是如此。对称地使用它们
这里没有任何不阻塞的证据。发送代码是什么样子的?为什么你会惊讶于读取会一直阻塞直到有东西被发送?我添加了服务器代码。我并不奇怪它会阻塞,因为它应该。但我感到惊讶的是,在收到第一份数据后,它就不再存在了。这里没有任何证据表明任何东西没有阻塞。
while (true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
int request = inFromClient.read();
System.out.println("erjioejfioe " + request);
if (request == 4) {
outToClient.writeBytes("41");
outToClient.write(5);
outToClient.writeInt(5);
outToClient.writeInt(3);
outToClient.writeInt(6);
outToClient.writeInt(5);
outToClient.writeInt(1);
}
request = 0;
request = inFromClient.read();
System.out.println("erjioejfioe " + request);
if (request == 4) {
System.out.println("SENDING THE SHIT");
outToClient.writeBytes("41");
outToClient.write(5);
outToClient.writeInt(3);
outToClient.writeInt(7);
outToClient.writeInt(2);
outToClient.writeInt(4);
outToClient.writeInt(3);
System.out.println("We get here!!");
}
break;
}