我把一个在会频繁用Tcp/ip连结服务器(指的是连结一段时间马上断开)的客户端装在一台win98的机器上,运行一段时间后,似乎它还是能连上服务器,但发的包就到不了服务器上了,用netstat -a检查发现,有很多指向本地端口0的记录,没有被释放,再检查当在网络断开的情况下,就会出现增加这样的记录。但我已经在断开的事件中加了closesock,我应该怎么办?我的程序已经影响到其它程序的运行,现在急需帮忙,大家快快。

解决方案 »

  1.   

    你需要自己去检查网络断开,要一一对应,断一个CLOSESOCK一个
      

  2.   

    不是,我经常等了很久都会有那些有很多指向本地端口0的记录没有被释放。我做了一个很测单的测试搞一个很简单的sock连结然后close都会出现一条指向本地端口0的记录,然后也不能释放它难道要我用wsacleanup才行?
      

  3.   

    发现在win2000中也会产生这样的记录,我想也是对的这是用来监听的,但win2000中这样的端口大约在产生10来个以后就不会再增加了但在win98中会不断增加,我也模糊记得以前曾有人讨论过这样的情况,难道现在就没高手指点我吗?
      

  4.   

    正常的4分节TCP连接关闭之后会有一个TIME_WAIT过程,大约持续2分钟,用来确保旧连接的所有分节都会被丢弃
      

  5.   

    问题的关键是在于用来监听端口没有被释放。TIME_WAIT的记录被释放了,但和它同时产生的LISTENING却没有被释放掉
      

  6.   

    win2000好像没有这样的问题啊!!!
      

  7.   

    我已经试过用shutdown但还是一样。的确在win2000下没问题
      

  8.   

    你可以去查TCP/IP协议,当关闭一个连接时,系统会再等待2SML的时间以确保关闭正常完成,所以如果你的连接太平凡就会导致许多端口处于2SML时间内,只要过段时间这些连接就会自动关闭。
      

  9.   

    我已经说过,那些处于Time_wait状态的连接,自动就释放了,但listening没有释放??