C#客户端-服务器应用程序问题

C#客户端-服务器应用程序问题,c#,connection,client,C#,Connection,Client,我在网络上运行应用程序,在某些情况下,客户端与服务器失去了连接。在此之后,当我想向服务器发送消息时,我收到以下错误:不允许在未连接的套接字上进行操作(类似于这样) 我想为对象类型TcpClient创建一个事件,当tcp_obj.Connected=false时调用一个函数来中断当前代码的执行。我怎么能这样做 或者给我其他建议 谢谢。我至少从Java的套接字编程中知道,当客户端与服务器失去连接时,服务器不知道也不可能知道。您需要某种心跳来检测早期断开连接 我们经常在客户机/服务器应用程序中使用心跳

我在网络上运行应用程序,在某些情况下,客户端与服务器失去了连接。在此之后,当我想向服务器发送消息时,我收到以下错误:不允许在未连接的套接字上进行操作(类似于这样)

我想为对象类型TcpClient创建一个事件,当tcp_obj.Connected=false时调用一个函数来中断当前代码的执行。我怎么能这样做

或者给我其他建议


谢谢。

我至少从Java的套接字编程中知道,当客户端与服务器失去连接时,服务器不知道也不可能知道。您需要某种心跳来检测早期断开连接

我们经常在客户机/服务器应用程序中使用心跳来检测早期断开连接并将其记录到服务器上。这样,服务器就可以关闭关联的套接字并释放回池的连接


只需定期向客户端发送命令并等待响应。如果在超时时间内没有收到响应,则假定断开连接并关闭流。

在尝试发送消息之前,我只需首先检查您的连接对象以确保您已连接。还要确保将发送逻辑放在try-catch中,这样,如果在传输过程中碰巧断开连接,就可以在不破坏应用程序的情况下继续

Psuedo代码:

private void SendMessage(string message, Socket socket)
{
  if(socket.connectionState = States.Connected)
  {
      try{
        // Attempt to Send
      }
      catch(SocketException Ex)
      {
        // Disconenct, Additional Cleanup Etc.
      } 
}
}

如果在连接状态更改之前处于C#,则在连接状态更改之前,将触发套接字断开连接事件。确保在套接字连接后立即将此事件绑定。

我们可以知道您为什么使用TCP套接字吗?用于调用tcp设备o服务器代码

如果要调用.net服务器应用程序,我建议您使用Windows Communication Foundation。通过net.tcp、http等公开服务很简单


实际上这是一个很老的问题

如果我正确理解了您的问题,您需要一种方法来知道您的应用程序是否仍然连接到服务器,或者是否仍然连接到服务器

如果是这样的话,那么一个解决方法就是使用UDP连接来检查连接(我知道开销,但比在连接状态上轮询要好得多),您可以在发送数据之前进行检查


由于UDP不面向连接,因此在发送数据时不需要连接

如何创建TCP断开连接事件?你能给我举个例子吗?