解决方案 »

  1.   

    补充:
    我尝试过在vForm关闭时候关闭socket连接,同样不起做用
      

  2.   

    顶一下。发现同一个程序不同的form,无论怎么改代码,server都能看到新的连接,但就是看不到连接断开
      

  3.   


    客户端走的端口我不关心情况是,假如每个客户端程序只有1个Form,每个Form发起一个连接,那么同一个IP上不管多少个客户端程序连接过去,server都能判断到链接新增和断开。但是修改为,客户端程序有2个Form,每个Form发起一个连接,同一个IP上只运行一个一个客户端程序,这时候server只能判断到链接的新增,但是判断不到连接的断开(准确的说是判断不到非主窗口的Form的链接断开)
      

  4.   


    客户端走的端口我不关心情况是,假如每个客户端程序只有1个Form,每个Form发起一个连接,那么同一个IP上不管多少个客户端程序连接过去,server都能判断到链接新增和断开。但是修改为,客户端程序有2个Form,每个Form发起一个连接,同一个IP上只运行一个一个客户端程序,这时候server只能判断到链接的新增,但是判断不到连接的断开(准确的说是判断不到非主窗口的Form的链接断开)你没明白呀,不管是不是同一Form 只要是连接的都能准确的判断哪个断开了。之前说的端口只是一方法。
    另一方法就是服务端 Recive返回0时或心跳包超时就说明断开连接了。
      

  5.   


    心跳包和Recive返回0这两个方法在实际项目中可能不是很合适,如何靠端口判断呢?
      

  6.   


    心跳包和Recive返回0这两个方法在实际项目中可能不是很合适,如何靠端口判断呢?

    你没试过怎么知不合适。我能说这个出来,肯定是有实际应用的。之前做网游的,这理由够了吧。
      

  7.   


    心跳包和Recive返回0这两个方法在实际项目中可能不是很合适,如何靠端口判断呢?

    你没试过怎么知不合适。我能说这个出来,肯定是有实际应用的。之前做网游的,这理由够了吧。拉灯  你要小心ao巴马呀
      

  8.   


    呃,我的意思是,目前程序的架构已经开了很多线程和端口处理不同的事物,所以想能不多增加一个新的端口进尽量不加。由于每个端口通讯的数据包不同,所以心跳的话,就要多开个端口。如果判断send后多久没有Recive,由于处理信息的时间无法判定(有的操作可能需要好几十秒),所以这个时间有点长了因此我才想通过server端得到客户端链接断开。令人不解的是,相同的代码,把客户端两个Form分别放到两个程序里运行,server就能判断出来,但是放在同一个程序里,就必须主窗口断开后,才能判断出来。