C# 套接字编程,关闭窗口

5

我正在写一个学校项目,这个项目是一个由客户端和服务器组成的基本聊天程序。我正在尝试处理其中一种程序(服务器或客户端)关闭的情况。

当您在客户端窗口中按下大红色X时,会发生以下情况:

private void Window_Closing(object sender, CancelEventArgs e)
{
    Data msgToSend = new Data();
    msgToSend.cmdCommand = Command.Logout; 
    msgToSend.strName = LoginName;
    byte[] b = msgToSend.ToByte();
    ClientSocket.Send(b);
}

它向服务器发送一条消息,通知其有人退出登录,以便从用户列表中移除该用户等操作。
问题出现在服务器正在关闭时,它尝试向客户端发送一条消息,告知它们服务器已关闭,以便客户端可以通知用户并关闭。
因此,当服务器的消息到达,并且客户端程序即将关闭时,但是上述代码将尝试虚假地通知服务器有用户注销,但此时服务器已经关闭,因此会出现大量错误消息。
我想我需要一种'if'语句来决定该代码是否应该运行,但我不知道应该是什么。有什么想法吗?
1个回答

3

只需检查客户端是否连接到服务器即可。 SocketTcpClient 类都有一个 Connected 属性:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.connected%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.connected(v=vs.110).aspx

然后可以进行以下操作:

 if (client.Connected) {
       Data msgToSend = new Data();
       msgToSend.cmdCommand = Command.Logout; 
       msgToSend.strName = LoginName;
       byte[] b = msgToSend.ToByte();
       ClientSocket.Send(b);
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接