none
C#中,用Socket类编写的程序,如果客户端的计算机进入休眠状态,此时服务端已经打开的Socket不会有任何变化,仍然处于等待状态? RRS feed

  • 问题

  • 我用Scoket编写一个很简单的聊天程序,客户端通过Connect方法连接到服务器,服务器接受之后,就调用BeginReceive方法等待客户端的信息。

    经过测试,我发现如果退出客户端的程序,此时服务器端程序就会运行到EndReceive,然后我就可以关闭这个Socket连接。

    但是如果客户端选择让计算机“休眠”(或者待机)的话,服务器程序那边不会调用EndReceive,而是一直等待下去。我觉得奇怪,此时客户端都实际上不存在了,为什么那个Socket还处于接收信息的状态?有什么方法可以将其关闭?
    da jia hao!
    2009年11月12日 8:23

答案

  • 你好!

    使用心跳这样的方式客户端每N秒向服务端发送指定的信息,服务端在约定时间内没有收到客户端的心跳信息,就认为客户端离线了。

    知识改变命运,奋斗成就人生!
    2009年11月12日 8:55
    版主

全部回复

  • 你好!

    使用心跳这样的方式客户端每N秒向服务端发送指定的信息,服务端在约定时间内没有收到客户端的心跳信息,就认为客户端离线了。

    知识改变命运,奋斗成就人生!
    2009年11月12日 8:55
    版主
  • 你好!

    使用心跳这样的方式客户端每N秒向服务端发送指定的信息,服务端在约定时间内没有收到客户端的心跳信息,就认为客户端离线了。

    知识改变命运,奋斗成就人生!

    谢谢,请问这种做法是不是标准的?就是说一般商用软件,是不是也采用这种方式呢?
    我担心所有客户端定时发送信息给服务器,服务器会承载不了.

    一般每隔多少秒发送一次呢?
    da jia hao!
    2009年11月13日 6:44
  • 你好!

    这种方式是广泛采用的方式,多少秒要根据你的情况而定。

    知识改变命运,奋斗成就人生!
    2009年11月14日 1:52
    版主