我正在开发将连接到我的服务器的Windows Phone应用程序。它通过在按下登录按钮时使用ConnectAsync来实现。但是,如果服务器关闭并且您想取消连接尝试,该怎么办?如何(确实)取消Windows Phone上的ConnectAsync请求?
这是当前的客户端代码完成与我的最新尝试在关闭套接字连接关闭。假设您知道如何关闭连接,您可以轻松实现超时。
private IPAddress ServerAddress = new IPAddress(0xff00ff00); //Censored my IP
private int ServerPort = 13000;
private Socket CurrentSocket;
private SocketAsyncEventArgs CurrentSocketEventArgs;
private bool Connecting = false;
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
if (Connecting)
{
CurrentSocket.Close();
CurrentSocket.Dispose();
CurrentSocketEventArgs.Dispose();
CurrentSocket = null;
CurrentSocketEventArgs = null;
}
UserData userdata = new UserData();
userdata.Username = usernameBox.Text;
userdata.Password = passwordBox.Password;
Connecting = ConnectToServer(userdata);
}
catch (Exception exception)
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Error: " + exception.Message));
}
}
private bool ConnectToServer(UserData userdata)
{
CurrentSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//Create a new SocketAsyncEventArgs
CurrentSocketEventArgs = new SocketAsyncEventArgs();
CurrentSocketEventArgs.RemoteEndPoint = new IPEndPoint(ServerAddress, ServerPort);
CurrentSocketEventArgs.Completed += ConnectionCompleted;
CurrentSocketEventArgs.UserToken = userdata;
CurrentSocketEventArgs.SetBuffer(new byte[1024], 0, 1024);
CurrentSocket.ConnectAsync(CurrentSocketEventArgs);
return true;
}
编辑:让我吃惊一个念头是,也许它是在请求堆叠起来的服务器计算机即使服务器软件是不是?那可能吗?
那不是我已经做了什么吗?我对异常没有任何问题,只是它们在后台堆叠,无论我使用CurrentSocket.Close()。一旦我打开服务器,它就会同时收到大量的请求。 – Switchice 2013-02-15 23:31:05
我相信我的回答解决了您的主要问题。你还有什么麻烦? – MarcF 2013-02-16 15:09:56
这就是即使当我使用CurrentSocket.Close(),如代码中所示,请求堆积起来。它似乎没有工作,为什么呢? – Switchice 2013-02-16 16:35:48