2015-07-20 81 views
0

我有這樣的代碼C#套接字發送錯誤

public static void Send(Socket socket, byte[] buffer, int offset, int size, int timeout) 
{ 
    int startTickCount = Environment.TickCount; 
    int sent = 0; // how many bytes is already sent 
    do 
    { 
     if (Environment.TickCount > startTickCount + timeout) 
      throw new Exception("Timeout."); 
     try 
     { 
      sent += socket.Send(buffer, offset + sent, size - sent, SocketFlags.None); 
     } 
     catch (SocketException ex) 
     { 
      if (ex.SocketErrorCode == SocketError.WouldBlock || 
       ex.SocketErrorCode == SocketError.IOPending || 
       ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) 
      { 
       // socket buffer is probably full, wait and try again 
       Thread.Sleep(30); 
      } 
      else 
       throw ex; // any serious error occurr 
     } 
    } while (sent < size); 
} 

形式打開時,我送它和關閉:

開放時間:

Launcher.Send(sock, Encoding.UTF8.GetBytes("Hello world"), 0, "Hello World".Length, 1000); 

它工作的很好,但在形式關閉:

try 
{ 
    Launcher.Send(s, Encoding.UTF8.GetBytes("Bye world"), 0, "Bye world".Length, 1000); 
} 
catch 
{ 
    Message.Error("Error"); 
} 

我總是得到Erro r消息。那裏有什麼問題?謝謝advace

編輯:

我已刪除的try {}趕上{}。現在我越來越:無法訪問處置對象。對象名稱:'System.Net.Sockets.Socket'。我不知道問題在哪裏,因爲如果我刪除套接字發送應用程序加載,然後關閉工程

+0

「我總是得到錯誤信息」 - *什麼*錯誤信息? –

+0

我被刪除嘗試{} catch {}。現在我越來越:無法訪問處置對象。對象名稱:'System.Net.Sockets.Socket'。我不知道問題在哪裏,因爲如果我刪除套接字發送應用程序加載,然後關閉作品 –

+0

@JonSkeet我已更新我的問題 –

回答

1

Socket.Close結束調用。

您在您的評論中提到,上面,你正在運行這段代碼:

foreach (Socket s in samp) 
{ 
    Launcher.Send(s, Encoding.UTF8.GetBytes(GetMyIP()), 0, GetMyIP().Length, 1000); 
    s.Close(); 
} 

因此,通過關閉窗體時,插座佈置。