簡體   English   中英

java-無法從套接字讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM