2012-08-11 69 views
0

我有一個服務器監聽端口和IP和客戶端,將連接到此服務器。java數據輸出流發送更多字節

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個字節。

+0

你可以添加你用來發送數據的代碼嗎? – 2012-08-11 09:38:56

+1

我認爲*是*用於發送數據的代碼 - 但不清楚爲什麼在循環讀取儘可能多的數據或接收端的代碼時爲什麼不循環。請澄清你的問題,因爲目前很難理解。 – 2012-08-11 09:42:29

+0

哦。那麼問題可能在於客戶。 – 2012-08-11 09:44:26

回答

1

您不能假設讀取將填充緩衝區。請參閱readFully()以獲取替代方法,否則循環直到獲得所需的所有數據。

0

通過一些假設和f從代碼看起來您​​正在從服務器讀取數據,然後將其轉發給另一個偵聽器或您稱之爲客戶端。因此,在客戶端代碼中,請檢查接收緩衝區是否被初始化爲超過正在發送的數據。這將導致在輸出中添加額外的字節。如果是這種情況,請使用System.arrayCopy將接收緩衝區中的實際字節複製出來(假設客戶端代碼爲java)。

+0

數據複製是不必要的。寫(緩衝區,0,計數)是所有需要的。 – EJP 2012-08-11 12:44:59

+0

這裏的客戶端基本上是一個調制解調器(套接字),它連接到不同的IP和端口上的其他服務器。所以我應該如何檢查接收緩衝區的初始化 – user1582791 2012-08-11 13:52:05