首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#客户端-服务器应用程序问题

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

Stack Overflow用户
提问于 2010-01-16 04:29:33
回答 4查看 915关注 0票数 1

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

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

或者给我其他建议。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-16 04:34:28

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-01-16 04:35:27

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

Psuedo代码:

代码语言:javascript
复制
private void SendMessage(string message, Socket socket)
{
  if(socket.connectionState = States.Connected)
  {
      try{
        // Attempt to Send
      }
      catch(SocketException Ex)
      {
        // Disconenct, Additional Cleanup Etc.
      } 
}
}

如果你在C#中,在你的连接状态改变之前,你将会在你的连接状态改变之前触发一个套接字断开事件。确保在套接字连接后立即绑定此事件。

票数 0
EN

Stack Overflow用户

发布于 2010-01-16 04:51:04

我们能知道你为什么使用TCP套接字吗?是用来调用tcp设备或服务器代码的吗?

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

致以敬意,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2074558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档