0

ソケットを介してテキストメッセージを取得および送信するために使用しているクラスライブラリに大きな問題があります。ここに私の簡単なコードがあります:

private void AcceptNewSocket()
{
    Socket socket = list.AcceptSocket();
    socket.ReceiveBufferSize = 1001;
    Thread socketTh = new Thread(new ThreadStart(AcceptNewSocket));
    socketTh.Start();
    WaitForMessenge(socket);
}

private void WaitForMessenge(Socket socket)
{
    byte[] buff = new byte[1001];
    int bufcount = socket.Receive(buff);
    /////////some operations on byte array
    while(bufcount > 0)
    {
      buffcount = socket.Receive(buff); //HERE it throws ObjectDisposedException and source is socket
      /////some operations on byte array
    }
 }

コンソール アプリケーションでライブラリを使用する場合、例外はありません。Windowsフォームアプリケーションで使用すると発生します。手伝って頂けますか ?

4

1 に答える 1

0

AcceptNewSocket() は本当に怪しいと思います。見直すことを強くお勧めします。

list.AcceptSocket() は何をしますか? これは、ソケットを処分するための可能な場所になる可能性があります。

スレッドを再帰的に作成するのはなぜですか? これにより、数十のスレッドが作成される可能性があるため、ソケットが破棄されると例外がスローされます。

そしてまあ...これとは別に、パフォーマンスを向上させるために、スレッドの代わりに ThreadPool クラスを使用します。

于 2015-01-30T16:32:11.257 に答える