System.OutOfMemmoryException
プロセスで ~1300 のスレッドが作成されるとスローされます (32 ビット OS)。問題は、接続ごとに新しいスレッドを作成していることです。それは悪い習慣です。
代わりに、送信データの管理には 1 つのスレッドのみを使用し、送信には同じスレッド (または 2 番目のスレッド) を使用し、接続の受け入れには 1つのスレッドのみを使用する必要があります。
すべてのクライアントを受け入れるスレッド プールのコード例:
TcpListener tcpListener = new TcpListener(IPAddress.Any, 90);
public void BeginAccept()
{
try { tcpListener.BeginAcceptTcpClient(AcceptClient, null); }
catch { /* Swallowing is bad */ }
}
private void AcceptClient(IAsyncResult ar)
{
TcpClient tcpClient;
try { tcpClient = tcpListener.EndAcceptTcpClient(ar); }
catch { /* Swallowing is bad */ }
finally { BeginAccept(); }
// TODO: Add your brand new tcpClient to some sort of collection, may be.
}
すべてのクライアントを受け入れる 1 つのスレッドのコード例:
TcpListener tcpListener = new TcpListener(IPAddress.Any, 90);
bool isListening;
public void BeginAccept()
{
while (isListening)
{
TcpClient tcpClient;
try { tcpClient = tcpListener.AcceptTcpClient(); }
catch { /* Swallowing is bad */ }
// TODO: Add your brand new tcpClient to some sort of collection, may be.
}
}