私は次の問題が午前許可されている各ソケットアドレス1つのだけ使用:私は私のWM6アプリケーションを終了し、再度起動してみたらC#.NETのソケット接続の問題 - 通常
は、私はこのエラーを取得: System.Net.Sockets.Socket.Bind(EndPoint localEP)で各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の1つの使用しか通常許可されていません at System.Net.Sockets.Socket.TcpListener.Start() ...
これはタイムアウトのための接続の時間間隔によるものだと思います開いているすべての接続を閉じて新しい接続を作成するようにしたいのですが、これは正しい方法ですか、これを処理する別の方法がありますか?ここで
はリスニングを開始するために使用されるコードです:
/// <summary>
/// Listens Asynchronously to Clients, creates a recieveMessageHandler to process the read.
///
/// Check WIKI, TODOS
/// </summary>
/// <returns></returns>
public void Listen()
{
myTcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
try
{
TcpClient myTcpClient = myTcpListener.AcceptTcpClient();
DateTime now = DateTime.Now;
//Test if it's necessary to create a client
ClientConnection client = new ClientConnection(myTcpClient, new byte[myTcpClient.ReceiveBufferSize]);
// Capture the specific client and pass it to the receive handler
client.NetworkStream.BeginRead(client.Data, 0, myTcpClient.ReceiveBufferSize, r => receiveMessageHandler(r, client), null);
}
catch (Exception excp)
{
Debug.WriteLine(excp.ToString());
}
}
}
シャットダウン時にmyTcpListenerを閉じます。 –
私は、アプリケーションをクラッシュさせるDLLをいくつか呼び出していますが、シャットダウンコードは呼び出されません。 – Astronaut
あなたはそのエラーをうまく処理する必要があります。あなたの管理されていないリソースを放置して放置するだけで、このエラーが発生します。 CLRは管理対象オブジェクトのメモリ管理を処理しますが、ファイルやネットワーク接続などの管理されていないオブジェクトに対して行う必要があります。 –