java数据输出流发送更多字节

java数据输出流发送更多字节,java,Java,我有一个服务器监听端口和ip,还有一个客户端将连接到此服务器 DataInputStream meterin=new DataInputStream(socket.getInputStream); DataOutputStream modemds=new DataOutputStream(modems.getOutputStream); 现在服务器正在这里发送一些数据:(caf0003a) int c; byte bt[]=new byte[11] c=meterin.read(bt,0,11

我有一个服务器监听端口和ip,还有一个客户端将连接到此服务器

DataInputStream meterin=new DataInputStream(socket.getInputStream);
DataOutputStream modemds=new DataOutputStream(modems.getOutputStream);
现在服务器正在这里发送一些数据:(caf0003a)

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)
但在客户端,我得到了。 (加州F000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00。
即使向上读取10个字节,也会超过10个字节。

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

根据一些假设和代码,您似乎正在从服务器读取数据,然后将其转发给另一个侦听器或您称之为客户机的对象。因此,在客户端代码中,请检查接收缓冲区是否初始化为大于发送的数据。。这将导致在输出中添加额外的字节。如果是这种情况,请使用System.arrayCopy从接收缓冲区复制实际字节(假设客户端代码为java)

你能添加你用来发送数据的代码吗?我想这就是用来发送数据的代码——但不清楚为什么你在阅读了预期的数据之前不循环,或者接收端的代码是什么。请澄清你的问题,因为现在很难理解。那么问题可能出在客户端。实际上,这里我不知道要读取的字节数。这里服务器发送的命令不是固定的,并且具有不同的字节,没有和终止字符。数据复制是不必要的。写(缓冲区,0,计数)是所有需要的。这里的客户机基本上是一个调制解调器(套接字),它以不同的ip和端口连接到其他服务器。那么,我应该如何检查接收缓冲区初始化