[英]java - cannot read from socket
我創建了一個ServerSocket並從其他客戶端讀取消息。 其中一位客戶堅持認為,我的應用程序在發送消息后無法正常運行。 我設法獲得了TCP跟蹤,並看到它們確實發送了消息,但是我的服務器應用程序沒有從套接字讀取任何數據。 我得到了一個線程轉儲,那里似乎一切正常:
"Reader Thread" daemon prio=3 tid=0x0ae8a000 nid=0x999 runnable [0x14525000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
我無法從流中讀取消息的原因可能是什么? 順便說一下,其他客戶不會遇到這種問題。
private byte[] readByte(int readCount) throws Exception {
int b;
int readedCount = readCount;
byte[] receiveBuffer = new byte[readCount];
while( true ) {
if( readCount > 0 ) {
b = inputStream.read(receiveBuffer, readCount - readedCount, readedCount);
} else {
b = 0;
}
if( b < 0 ) {
throw new UnrecoverableSocketException("Connection is Broken");
} else {
readedCount = readedCount - b;
}
if( readedCount == 0 ) {
return receiveBuffer;
}
}
}
readCount
可能與流中實際可用的數據量不匹配。 如果您的客戶端發送了10個字節,但您期望12個字節,則代碼將被卡住,等待這兩個額外的字節。
您的大多數readByte()方法都可以使用DataInputStream.readFully()來實現,並且您將獲得數百萬倍於已完成的測試量的收益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.