どうしても必要な場合を除き、ソケットの初期化をクラス コンストラクターに配置しないでください。
必要に応じて、次をハードコーディングしますSocketException
。
private bool abortListener;
private TcpListener listener;
private TextBox textBox1;
public TCP_Class() {
abortListener = false;
try {
listener = new TcpListener(System.Net.IPAddress.Any, 8000);
} catch (SocketException err) {
listener = null;
textBox1.Text = err.Message;
}
}
public void Listen(string ipString, int port) {
if ((listener == null) || !String.IsNullOrEmpty(ipString)) {
listener = new TcpListener(System.Net.IPAddress.Parse(ipString), port);
}
listener.Start();
while (!abortListener) {
try {
using (var client = listener.AcceptTcpClient()) {
// ...
コードの残りの部分は省略されていますが、これで作業は完了です。
アップデート:
わかりました。何が問題なのかを調べるには、エラー メッセージを表示する必要があります。
プロジェクトで例外が発生した場合、私のプロジェクトで作成した次のようなものが表示される可能性が最も高いです。

これにより、開始するためのいくつかのことが得られます。
いいえ、例外は DivideByZeroException ではないため、コードを編集して、キャッチされた例外のタイプを処理する必要があります。
- 次は、コードの「その例外を処理する」部分です。ソフトウェアプログラマーとして、どうすればそれを防ぐことができますか? そのタイプの例外をキャッチするのに十分な知識がある場合は、通常、コードを書き直して、そのような例外が発生しないようにすることができます。
スクリーンショットのコード例の場合、簡単な解決策は次のとおりです。
if (denom != 0) {
answer = num / denom;
} else {
answer = -1;
}
ちょっと待って!もっとある。
上の図のようなダイアログ ボックスが表示されたままになっている場合は、[ Actions:]セクションの [View Detail...] をクリックして、スタック トレースと、存在する場合と存在しない場合がある内部例外を取得できます。

それを手に入れたら、すべてのストーリーを知る必要があります。
特定の例外の処理方法がわからない場合は、例外名とその例外のメッセージを検索してください。明らかに、他の誰かが既にその問題に遭遇しているか、または Microsoft がそれをキャッチするためのルーチンを作成していない可能性があります。