我做了一个异步通讯的program,基本功能都实现了,现在的问题是Server和Client的非正常关闭连接以及正常关闭后的连接如何处理。
1。正常关闭
使用Client端的EndClient函数 ,Server端没有反应。后来我在BeginReceive的回调函数OnReceiveData中 加入这样的代码
public void OnReceiveData(IAsyncResult ar)
{
ReceiveDone.Set();
Sock = (Socket)ar.AsyncState;
try
{
int nBytesRec = Sock.EndReceive(ar); //收到数据长度
ReceiveDone.Set();
if (nBytesRec > 0)
{
string ss = Encoding.ASCII.GetString(Receive_Buffer, 0, nBytesRec);
。。。
}
else
{
listBox_Receive_Status.Items.Add("收到数据长度为零,远程客户机可能已经关闭,请重新监听。");
//这里我强行加入提示语句,因为发现无论是用EndClient的时候,Server端会进入BeginReceive的回调中。
问题1:Client端关闭,为什么会进入 BeginReceive的回调中
而且,收到数据长度为零。
问题2:在客户端关闭以后,作为接受的Socket Sock。connected属性=true。上面用蓝色字体显示
}
在这种情况下,我如何判断Client端已经关闭,进而对Server端也进行一些相应的处理啊?
比如 Server关掉,重启?
感谢各位的帮忙啊 ,多多关注啊。