应该是你的程序里的Port号没有释放,那样再有数据过来的时候,需要重新连接,而此时前面使用的Port号已经占用了,重新启动,释放了已经占用的Port号,当然可以了。

解决方案 »

  1.   

    而且我的程序在每个连接断开的时候执行了pSocket->Close(),
    然后是delete pSocket.不知道这样是不是已经释放了端口,如果还不行的话,
    我就在close之前再执行一下ShutDown(2).
      

  2.   

    MFC 的CSocket不是很好用了,经常容易出莫名其妙的问题,最好还是直接使用API函数好些,
      

  3.   

    kiko_lee(可是什么都不知道):
    这我也知道,可是来不及了,先把这一关过了。
    (正在出差调程序呢)
    等回去以后再改。
      

  4.   

    果然是端口没有释放的问题
    我Create的时候指定了端口号,这样就只能连接一次。
    第一次连接挂断的时候我执行了语句
    pSocket->ShutDown(2);
    pSocket->Close();
    delete pSocket;为什么还是不行?
    用什么方法才能真正释放端口?
      

  5.   

    我又试了一下,发现不是这个问题。
    当第一个连接刚刚断开的时候,确实是不能马上在同一个端口上建立下一个连接,
    但如果等待一段时间,就能够连接上。
    这只能说明是Socket的断开需要一定的时间才能完成。如果我在客户端采用自动分配端口的方法,应该不会出现端口被我用尽的情况才对。
    另外,我用netstat -a,占用的端口好像也不是很多。
      

  6.   

    我离问题的真相越来越近了
    程序执行一段时间之后,我运行netstat -a,会发现有很多端口处于Listening状态,
    最严重的情况下,客户端无法连接,这时候再查,就会发现大约从1000到5000之间的
    所有端口都是listening状态。
    我怀疑,服务器端监听端口,客户端请求连接的时候,服务器另外分配了一个端口
    (1000-5000之间),但是客户端断开连接时,尽管服务器端执行了一系列命令:
    pServerSocket->ShutDown(2);
    pServerSocket->Close();
    但是其所占用的端口仍然没有释放,这样,导致可用端口越来越少,最后就不能用了。
    还有一个现象,并不是一次连接就会占用一个端口,好像是一个端口用几次以后就再也不能用了。这是什么原因?怎么才能真正释放掉呢?
      

  7.   

    高手们现在上班了吧。很奇怪,我用netstat -a 得到的结果中,很多端口的状态是LISTENING,
    我查了一下msdn,发现只有LISTEN状态,不知二者之间是什么关系?
      

  8.   

    我以前也遇到过这种问题,(用的是socket API),仔细检查后发现是在有些情况下没有
    关闭socket,用netstat -a检查也是有n个处于listening 状态你的程序中间有没有return,break之类的呀?及出现异常后没有释放socket,我上次就是出现了这个错误,程序运行3天后就不正常了,改了以后一直正常的运行着,
    不知对你有没有帮助.