[英]I/O in JAVA - reading data from java.net.Socket
我的客戶端有問題-我用JAVA開發的服務器應用程序。 我使用java.net*
包中的Socket
和ServerSocket
。 當客戶端連接到服務器時,客戶端發送消息,例如7200字節。 在服務器中,我使用InputStream
。 有時我收到整個消息(7200字節),但是很多時候我收到的消息少於7200字節。 JAVA中有什么方法可以接收整個消息並關閉連接? 也許我應該在JAVA中使用其他庫進行tcp / ip連接?
可能會有所幫助: InputStream.read()文檔。
讀取從輸入流一定數量的字節,並將其存儲到緩沖數組b。 實際讀取的字節數以整數形式返回。
直到整個字節緩沖區填滿或流結束,該方法才會阻塞。 相反,它會返回當前可用的盡可能多的數據。
從文件讀取時,這不太可能發生,但是對於套接字來說,這是很正常的。
返回已寫入字節緩沖區的實際字節數,因此您可以確定是否有足夠的數據。
您可以使用read(buf,start,len)來從緩沖區的開頭而不是從數據塊的開頭開始。 例如,如果你正在讀正好 7200字節,這樣做:
byte [] buf = new byte[7200];
int len = 7200;
int pos=0;
while(len > 0) {
int rd = is.read(buf, pos, len);
if(rd<0) {
//premature EOF
break;
}
pos += rd;
len -= rd;
}
否則,如果您不預先知道消息的長度,則可以選擇幾種方法。 其中:
我建議從jboss到tcpip通信使用jgroups( http://www.jgroups.org/manual/html/index.html )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.