谢谢rtdb的回复,
现在的问题是:当服务器启动后,客户端不能采用p0ll方法马上捕获服务器启动的消息。因此就会影响数据的及时发送!

解决方案 »

  1.   

    我现在做的是一个热备系统。
    我首先在客户段采用主通道发数据,如果发现主通道上的服务器没有启动,我会马上采用备用通道发数据。
    因此,我需要及时知道能否连接到服务器,及时进行通道的选择。
    通过用上面的程序,一般情况下用POLL()可以及时获得socket连接服务器情况,但当客户断先启动,而服务器后启动,有时服务器段会报错“远程主机强迫关闭了一个现有连接”,
    所以很不清楚,为什么会报错!怎么解决该问题?
      

  2.   

    为什么会报错?我都说两次了,还有什么不清楚的?状态1: 服务器未启动
    状态2: 服务器操作系统启动,网络READY,但你们的通信服务程序还没启动
    状态3: 通信程序启动,系统连接正常在状态2时,你就会收到“远程主机强迫关闭了一个现有连接”。
      

  3.   

    “在状态2时,你就会收到‘远程主机强迫关闭了一个现有连接’”。这个过程,我也清楚。因为客户端如果发现服务器没有启动会马上关闭该socket,感觉该socket没有关闭彻底。
    我想明白TCP/IP协议内部是怎么处理的,是不是与连接断开四次握手有关系,与Time_wait的时间有关等?以及如何避免?
    我不可能每次都保证服务器先启动,客户端都后启动。
      

  4.   

    今天翻了一下TCP/IP协议,发现里面有一个RST标志,
    通过抓包发现是客户端给服务器发送了RST报文,导致服务器产生了‘远程主机强迫关闭了一个现有连接’的错误!
    不知大侠有没有什么好的方法可以避免。