[求助]异步通信中C/S之间的连接与断开的问题
异步通信中Server跟Client之间的连接与断开。我的程序中:
1。server 开始 listen,然后 Client 进行Connect. 连接成功以后可以进行数据的传送.但是如果 调用 EndServer函数,Client 端的 Send 功能依然可用.就是说, 此时,点击Send依然能够传送数据.
private void EndServer()
{
try
{
try
{
//shutdown函数中会抛出异常。可以被截住。
//但是我们将选择不把该异常显示出来。
Listener.Shutdown(SocketShutdown.Both);
try
{
Listener.BeginDisconnect(true, new AsyncCallback(DisconnectServerCallback), Listener);
}
catch
{
listBox_Receive_Status.Items.Add("BeginDisconnect抛出异常");
}
}
catch(SocketException se)
{
}
catch(ObjectDisposedException ode)
{
}
try
{
Listener.Close();
Console.WriteLine(Listener.Connected);
listBox_Receive_Status.Items.Add("Server端已经close。。");
}
catch(InvalidOperationException ioe)
{
listBox_Receive_Status.Items.Add("Server端出现问题"+ioe.ToString());
}
catch(Exception ee)
{
listBox_Receive_Status.Items.Add("Server端没有close"+ee.ToString());
if (Listener.Connected)
Console.WriteLine("Winsock error: " + Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()));
}
}
catch
{
listBox_Receive_Status.Items.Add("Server还没有开始监听,无法断开,请先开启监听端口。");
}
}
private static void DisconnectServerCallback(IAsyncResult ar)
{
// Complete the disconnect request.
Socket client = (Socket)ar.AsyncState;
client.EndDisconnect(ar);
//Listener.EndDisconnect();
}
这是Server端的End的代码。先 shundown,然后begindicconnect,enddisconnect。最后close。然而,即使是这样,也可以发送数据并且可以正确的受到。 但是 我仅仅只是运行Server的End的代码。Client端没有断开。不知道这个时候他们之间的连接是否已经断开?
请各位指点。。。