【问题标题】:C# Socket programming, closing windowsC# Socket 编程,关闭窗口
【发布时间】:2015-01-27 14:03:24
【问题描述】:

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

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

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

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

所以服务端的消息到了,客户端程序就要关闭了,但是上面的代码会尝试错误的通知服务端注销,但是这个时候服务端已经down了,所以会有一大堆错误消息。

我想我需要在上面的过程中使用某种“if”语句来决定代码是否应该运行,但我不知道它应该是什么。想法?

【问题讨论】:

    标签: c# .net sockets terminate


    【解决方案1】:

    只需检查客户端是否连接到服务器。 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);
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多