後にソケットを再び聴きます。実際に私は2つのサーバーとクライアントを持っています。スタートは、私は小さなC#のソケットアプリケーションを書いて切断
ユーザーは、クライアントを実行するサーバーのIPとポートを入力し、印刷機「接続」、その後、一度、彼らはテキストボックスにテキストを入力し、それをサーバーに送信することができます接続されています。 、最も最近受信したメッセージの下に:
サーバは単に「未接続」または「[ポート] [IP]からの接続」のいずれかが表示されません。
サーバーが正常にメッセージを受け取り、さらにはクライアントの切断罰金を処理します。 クライアントが切断された後にもう一度聞き取ろうとしていますが、何らかの理由で試してみると何も聞こえなくなります。ここで
は、私のコードの一部です:
Socket socket;
private void listen()
{
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
socket.Listen(10);
socket.BeginAccept(new AsyncCallback(acceptAsync), socket);
}
と
private void receiveAsync(IAsyncResult res)
{
Socket socket = (Socket)res.AsyncState;
try
{
int nBytes = socket.EndReceive(res);
if (nBytes > 0)
{
Invoke(new MethodInvoker(delegate()
{
lMessage.Text = encoder.GetString(buffer);
}));
setupReceiveAsync(socket);
}
else
{
Invoke(new MethodInvoker(delegate()
{
lConnections.Text = "No Connections.";
lMessage.Text = "No Messages.";
socket.Shutdown(SocketShutdown.Both);
socket.Close();
listen();
}));
}
}
catch { }
}
最後の行:聞きます();エラーを投げるものです。 私は単にsocket.BeginAccept()をもう一度呼び出そうとしましたが、例外もスローされます。
私は取得していたメッセージがある:私は私の聞いて呼び出していない場合は、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の
つだけ使用量は、通常、
を許可されています()関数を呼び出して、代わりにsocket.BeginAccept()を呼び出すと、最初にsocket.listen()を呼び出す必要があります。
socket.listen関数を呼び出すと、既に接続されていることがわかりますカート開始聴き取り
私はその後、私は再び受信を開始しますか、非同期接続を行い、いくつかの非同期メッセージを受け取ったら?
コードをさらに投稿してください。リスニングソケットを適切に廃棄せずに放棄しているように聞こえますが、まだガベージコレクションされていないので、ポートはまだ開いています。 – cdhowie
どこで 'EndAccept'を呼び出していますか? – Donnie