2010-09-27 29 views
-3

socket.Available不起作用。爲什麼?我需要使用socket.Available而不是size。但它不起作用。所以我需要一個返回socket中字節數的方法。返回TCP/IP套接字中可用字節數的方法

void Receive(Socket socket, byte[] buffer, int offset, int size) 
{ 
    //int sockAvail = socket.Available; Here socket.Available always asigns 0 to sockAvail 
    int received = 0; 

    do 
    { 
     try 
     { 
      received += socket.Receive(buffer, offset + received, size - received, SocketFlags.None); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 

    } while (received < size); 

    MessageBox.Show(socket.Available.ToString()); 
} 
+0

你到底想幹什麼?連接緩衝區中的字節數是您正在查找的內容還是尚未傳輸的數字? – 2010-09-27 12:27:11

+2

爲什麼標記爲C? – 2010-09-27 12:28:02

+1

如果讀取'Receive'操作中的所有可用字節,'socket.Available'可能是'0'或'false'(不確定返回類型,對不起)。 – leppie 2010-09-27 12:29:06

回答

0

socket.Available是用於阻塞套接字。通過異步讀取,您只需閱讀可以讀取的內容,然後返回到可以閱讀更多內容的選擇中。

+0

我正在使用同步讀取,儘管它不起作用 – 2010-09-27 12:32:44

+0

socket.Available返回整數,但在讀取接收到的字節之前,它顯示0 – 2010-09-27 12:52:08

+0

socket.Available何時將其值賦值給變量 – 2010-09-28 12:04:36

3

通過MSG_PEEKrecv()

+0

我需要在套接字中傳輸的字節數。 – 2010-09-27 15:12:32

+0

插座怎麼知道?它知道有多少已被傳輸但尚未從應用程序讀取 - 這就是可用性。您可能需要在更高級別上工作才能知道 - 例如,如果您要傳輸HTTP,則可以查看內容長度標題以瞭解內容有多大(它是可選的,但這僅僅是一個示例) – 2010-09-27 15:44:03

0

它確實有效。它只是不符合你的期望。你的期望是錯誤的。調整它們。

1

Socket.Available有到緩衝區之前調用,否則它始終爲0。

相關問題