2011-02-12 54 views
-1

現在讓我們在這裏我們使用了一種鎖插槽接受secnario和包是5000個字節 與receivetimeout設置爲一秒套接字選項收到超時

s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000); 

int bytes_recevied = 0 ; 
byte [] ReceiveBuffer = new byte[8192] ; 

try 
{ 
    bytes_received = s.Receive(RecevieBuffer) ; 
} 
catch(SocketException e) 
{ 
     if(e.ErrorCode == 10060) 
     { 
      Array.Clear(ReceiveBuffer,0,ReceiveBuffer.Length); 
     } 
} 

現在我們secnario決定了4000個字節去了扔alreadys,套接字仍然阻塞,並在接收端有一些錯誤,現在在接收端,我們將通過捕獲套接字來處理4000字節ecxecption

是否有任何保證,即發送端的套接字不會丟失仍然爲的1000個字節發送套接字是否知道截斷它們,如果他試圖再次接收它不會被我們接收到的第一個字節wasent斷開連接?

我在問的是: a)tcp是否有一些mecanisem告訴套接字處理其餘的消息? b)是否有我們可以發送或接收的套接字標誌,告訴緩衝區處理剩餘的消息?

+0

你的代碼和你的大部分問題沒有多大意義。可能是因爲你誤解TCP只提供一個流,並不能保證數據包的任何信息。 – CodesInChaos 2011-02-12 16:21:27

回答

1

首先,TCP/IP operates on streams, not packets。因此,無論緩衝區大小,阻塞呼叫或MTU如何,您都需要協議中的某種消息幀。

其次,每個TCP連接是獨立的。當出現通信錯誤時,正常設計爲close a socket。然後可以建立一個新的套接字連接,它完全獨立於舊連接。

+0

你完全錯過了這一點, 我知道它可以在河流上工作.. – 2011-02-12 23:30:04