0

我有一台服务器正在侦听端口和 ip,还有一个客户端将连接到该服务器。

DataInputStream meterin=new DataInputStream(socket.getInputStream);
DataOutputStream modemds=new DataOutputStream(modems.getOutputStream);

现在服务器在这里发送一些数据:(CA F0 00 00 00 00 00 00 00 3A)。但是当我读到这个时

int c;
byte bt[]=new byte[11]
c=meterin.read(bt,0,11)`
System.out.println("bytes"+c)  // it is returning 10 bytes

modemds.write(bt,0,c)

但在客户我得到了。(CA F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00)。即使它向上读取 10 个字节,也超过 10 个字节。

4

2 回答 2

1

您不能假设读取会填满缓冲区。请参阅 readFully() 以获取替代方案,或者循环直到获得所需的所有数据。

于 2012-08-11T10:09:23.323 回答
0

通过一些假设和 fFrom 代码,看起来您正在从服务器读取数据,然后将其中继到另一个侦听器或您称为客户端的东西。因此,在客户端代码上,请检查接收缓冲区是否被初始化为超过正在发送的数据......这将导致在输出中添加额外的字节。如果是这种情况,请使用 System.arrayCopy 从接收缓冲区复制出实际字节(假设客户端代码是 java)。

于 2012-08-11T10:17:20.687 回答