2011-02-25 101 views
0

說我有一個TcpClient,我接受來自TcpServer在C#中,出於某種原因它保持默認阻止。有沒有其他的力量可以改變套接字阻塞的設置?就像說它受遠程連接的影響?c#套接字阻止

我知道我設置了阻塞來恢復一些構建,但我改變了它,甚至引入了TcpClient而不是直接套接字。我沒有特別改變阻塞爲真,我只是評論阻塞=錯誤。這種情況可能與端點一直存在嗎?

我不知道,但似乎有一天,我的套接字在沒有任何真正的代碼變化的情況下變得不穩固。

public void GetAcceptedSocket(TcpClient s) 
{ 
    try 
    { 
     sock = s; 
     IPEndPoint remoteIpEndPoint = s.Client.RemoteEndPoint as IPEndPoint; 
     strHost = remoteIpEndPoint.Address.ToString(); 
     intPort = remoteIpEndPoint.Port; 
     ipEnd = remoteIpEndPoint; 
     sock.ReceiveTimeout = 10000; 
     boolConnected = true; 
     intLastPing = 0; 
     LastPingSent = DateTime.Now; 
     LastPingRecieved = DateTime.Now; 
     handleConnect(strHost, intPort); 
     oThread = new Thread(new ThreadStart(this.run)); 
     oThread.Start(); 
    } 
    catch (Exception e) 
    { 
     handleError(e, "Connect method: " + e.Message); 
    } 
} 

回答

0

真的沒有答案,我從來沒有重複過這個,幾個月後,和一個新的Windows安裝,選擇了代碼,並沒有問題了。雖然非常奇怪,但卻無法找到它發生的編程推理。就像我說的那樣,幾個月後它剛剛工作? 他們應該有一個'Unawnserable'選項:p。

+0

嘿,我問了一個主持人,他們讓我投我自己的帳篷。所以不要低估我。 – 2011-12-27 01:26:39

2

喜歡說的是它受遠程 連接呢?

沒有。

如果您在服務器端創建SocketTcpClient的某些代碼,那會更好。我在C#中找不到TcpServer類。你在說什麼TcpListener? 如果您是,請確保您set Socket's Blocking true如果您使用AcceptSocket創建一個新的套接字。如果您致電AcceptTcpClient,則不應擔心阻止或非阻止模式,因爲TcpClient始終處於阻止模式。

TcpClient類提供了簡單的 方法連接,發送和 通過網絡 在同步阻斷模式接收流數據。

MSDN

+0

這太好了,但我當時說的是,當AcceptTcpClient它給了我一個TcpClient與堵塞socked。這是關心的問題。 – 2011-02-25 23:51:49

+0

@ kelton25,你怎麼知道封鎖是關閉的? – young 2011-02-26 00:21:41

+0

斷點,檢查TcpClient.Client.Blocking – 2011-02-26 00:45:56