2011-04-07 127 views
0

我有一個服務器與多個線程。這裏是我的服務器連接:網絡流問題

while (true) { 
    client = this.tcpListener.AcceptTcpClient(); 
    sThread a = new sThread(form1, listaThreads); 

    lock(Program.lockThreads) { 
      listaThreads.Add(a); 
    } 
    Thread clientThread = 
     new Thread(new ParameterizedThreadStart(a.HandleClientComm)); 
    clientThread.Start(client); 
} 

在我sThread類我有以下代碼:

public void HandleClientComm(object client) 
{ 
    String a = ""; 

    try // nu uita sa pui inapoi! 
    { 
      tcpClient = (TcpClient) client; 
      clientStream = tcpClient.GetStream(); 
      sr = new StreamReader(clientStream); 
      sw = new StreamWriter(clientStream); 

      a = sr.ReadLine(); 
    ... 

但在某些情況下,我在a = sr.ReadLine();得到一個錯誤,說以下內容:screenshot

它會是什麼?

+0

它看起來像連接被切斷,然後才能開始閱讀。遍歷代碼並在發生異常之前查看套接字的狀態。查看是否有防火牆在某處運行,可能會阻止這種連接。 – 2011-04-07 07:49:03

+1

連接被遠程主機強行關閉 - 如果消息在客戶端上,則服務器稱爲.Close()或類似的,反之亦然 – 2011-04-07 07:50:04

回答

2

有時遠程主機重新啓動,或者用戶殺死客戶端程序,或者路由器重新啓動失去其狀態並丟棄它們用來運載的所有連接。

處理客戶端斷開連接只是編程可靠軟件的一部分,您應該通過清理爲客戶端存儲的任何狀態並繼續前進來處理此問題。

當然,如果您還寫了客戶端軟件,並且您的用戶說給出了類似的錯誤消息,那麼您應該進一步調查。 :)