我有两台服务器和一台客户端。一台服务器位于客户端所在的同一台计算机上。我需要断开与本地服务器的连接并连接到远程服务器。
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 和设置)。请帮忙!