C#Socket编程,关闭窗口

时间:2014-11-28 22:26:05

标签: c# .net sockets terminate

所以,我正在写这个学校项目,应该是一个由客户端和服务器组成的基本聊天程序。我正在尝试处理服务器或正在关闭的客户端程序。

因此,当您在客户端窗口中按下大红色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);
}

它向服务器发送一条消息,通知它有人正在注销,因此它可以从用户列表中删除用户等。

服务器关闭时会出现问题,它会尝试向客户端发送消息,通知他们服务器已关闭,因此客户端可以通知用户然后关闭。

所以服务器的消息到了,客户端程序即将关闭,但上面的代码会尝试错误地通知服务器注销,但服务器此时已经关闭了,所以会有是一大堆错误信息。

我想我需要某种“如果'上面的过程中的语句可以决定代码是否应该运行,但我不知道它应该是什么。想法?

1 个答案:

答案 0 :(得分: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);
 }