希望讨论多种方案。
另外问一下:TCP联接(不是传输)能发现非正常断开(如client关机、网线断了)吗?TCP一个端口的连接数有限制吗?

解决方案 »

  1.   

    简单,1、做一个线程,定时去检查所有client的在线情况。2、给client实体添加一个处理线程,发送test消息,如果收不到client的响应,就认为是断开了。3、
      

  2.   

    另外问一下:TCP联接(不是传输)能发现非正常断开(如client关机、网线断了)吗?TCP一个端口的连接数有限制吗?
    ________________
     关机有FD_CLOSE消息, 网线断了就没有. 所以要定时 PING.
      

  3.   

    use SetSockOpt() set parameter--KEEPALIVE
    as the server check the client at a cycle, 
    in theory, the socket counter is unlimited.
      

  4.   

    不重叠的话,TCP一个端口同时只能存在一个连接。BOOL b = true;
    SetSockOpt( hSocket, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&b, sizeof(BOOL));
      

  5.   

    谢谢大家,首先MFC里有个类accept没个端口好像最多接5个联接,而且好像ip欺骗就是利用这个来使欺骗ip主机暂时不能响应的,有确定的答案吗?
    然后 lichungen的信息可能就是我最想要的,我试试。
    samyoung(sam)的做法,以前我是想这样,不过觉得在负载重的情况下,似乎会误报,尤其是第二种,象200个client怎么办,同时发test似乎不好。
    请继续讨论,过两天我结贴给大家,我前些天结的贴好想别人还没得到分,是不是要等几天?还有有两个贴子没人回,我自己发现的有什么节约分的方法?这个贴子大家好热情所以所有的问题我都忍不住问了:)
      

  6.   

    哦? heartthrob,好主意
    在等两天,欢迎新的讨论
      

  7.   

    再说说,其实对于通信来讲,这些东西开销很小的。关于通信系统的心跳测试机制,以前也讨论过多次,我认为,还是每个client和server之间都有线程来处理link test比较好,开销也不大,为什么,因为数据量其实很小,一个数据包头加一个状态字就可以了。server端本来就有处理数据接收的线程,对每个client得数据都同样处理,就可以了。