如何从一个端点断开然后连接到另一个端点? - C#

时间:2017-12-30 20:08:51

标签: c# multithreading sockets client-server disconnect

我有两台服务器和一台客户端。一台服务器位于客户端所在的同一台计算机上。我需要断开与本地服务器的连接并连接到远程服务器。

AutoResetEvent disconnectDone = new AutoResetEvent(false);
IPEndPoint localEndPoint = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0], PORT);
Socket socket;

// somewhere I initialize the socket and connect to the local end point

public void someButton_Click(object sender, EventArgs e)
{
    string IP = someTextBox.Text;
    if (socket.Connected)
    {
        socket.Shutdown(SocketShutdown.Both);
        socket.BeginDisconnect(true, DisconnectCallback, socket);
        disconnectDone.WaitOne();
    }

    IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(IP), PORT);
    socket.BeginConnect(remoteEndPoint, ConnectCallback, socket);
}

private void DisconnectCallback(IAsyncResult AR)
{
    Socket socket = (Socket)AR.AsyncState;
    socket.EndDisconnect(AR);
    disconnectDone.Set();
}

它使用 WaitOne 方法冻结,因为 DisconnectCallback 没有回答。 如果在 BeginDisconnect 方法中,我将true更改为false,那么"可以正常工作"。但是进一步 BeginConnect 给了我一个例外,即套接字仍然连接。

我真的不明白所有这些断开的东西是如何工作的。或者我可能错误地使用这些线程方法( WaitOne 设置)。请帮忙!

0 个答案:

没有答案