我正在開發將連接到我的服務器的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