着急:机器运行一段时间之后就无法建立连接了 应该是你的程序里的Port号没有释放,那样再有数据过来的时候,需要重新连接,而此时前面使用的Port号已经占用了,重新启动,释放了已经占用的Port号,当然可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 而且我的程序在每个连接断开的时候执行了pSocket->Close(),然后是delete pSocket.不知道这样是不是已经释放了端口,如果还不行的话,我就在close之前再执行一下ShutDown(2). MFC 的CSocket不是很好用了,经常容易出莫名其妙的问题,最好还是直接使用API函数好些, kiko_lee(可是什么都不知道):这我也知道,可是来不及了,先把这一关过了。(正在出差调程序呢)等回去以后再改。 果然是端口没有释放的问题我Create的时候指定了端口号,这样就只能连接一次。第一次连接挂断的时候我执行了语句pSocket->ShutDown(2);pSocket->Close();delete pSocket;为什么还是不行?用什么方法才能真正释放端口? 我又试了一下,发现不是这个问题。当第一个连接刚刚断开的时候,确实是不能马上在同一个端口上建立下一个连接,但如果等待一段时间,就能够连接上。这只能说明是Socket的断开需要一定的时间才能完成。如果我在客户端采用自动分配端口的方法,应该不会出现端口被我用尽的情况才对。另外,我用netstat -a,占用的端口好像也不是很多。 我离问题的真相越来越近了程序执行一段时间之后,我运行netstat -a,会发现有很多端口处于Listening状态,最严重的情况下,客户端无法连接,这时候再查,就会发现大约从1000到5000之间的所有端口都是listening状态。我怀疑,服务器端监听端口,客户端请求连接的时候,服务器另外分配了一个端口(1000-5000之间),但是客户端断开连接时,尽管服务器端执行了一系列命令:pServerSocket->ShutDown(2);pServerSocket->Close();但是其所占用的端口仍然没有释放,这样,导致可用端口越来越少,最后就不能用了。还有一个现象,并不是一次连接就会占用一个端口,好像是一个端口用几次以后就再也不能用了。这是什么原因?怎么才能真正释放掉呢? 高手们现在上班了吧。很奇怪,我用netstat -a 得到的结果中,很多端口的状态是LISTENING,我查了一下msdn,发现只有LISTEN状态,不知二者之间是什么关系? 我以前也遇到过这种问题,(用的是socket API),仔细检查后发现是在有些情况下没有关闭socket,用netstat -a检查也是有n个处于listening 状态你的程序中间有没有return,break之类的呀?及出现异常后没有释放socket,我上次就是出现了这个错误,程序运行3天后就不正常了,改了以后一直正常的运行着,不知对你有没有帮助. 线程中的线程 hwnd变量 的超古怪问题 如何从字符串中提取数字啊 招聘VC.net网络程序开发人员 怎么同时使用 程序和动态库 中的资源? madchook使用时对反HOOK问题的请教 我的登陆界面 ***文件操作***我到底哪里写错了,为什么改不了文件? 哪有VC6英文版的下载?我周围都是极次极次的汉化版~ 统计:你最崇拜的程序员是谁? 动态创建的CBitmapButton 按钮为什么不能显示 多网卡机器上的socket编程
然后是delete pSocket.不知道这样是不是已经释放了端口,如果还不行的话,
我就在close之前再执行一下ShutDown(2).
这我也知道,可是来不及了,先把这一关过了。
(正在出差调程序呢)
等回去以后再改。
我Create的时候指定了端口号,这样就只能连接一次。
第一次连接挂断的时候我执行了语句
pSocket->ShutDown(2);
pSocket->Close();
delete pSocket;为什么还是不行?
用什么方法才能真正释放端口?
当第一个连接刚刚断开的时候,确实是不能马上在同一个端口上建立下一个连接,
但如果等待一段时间,就能够连接上。
这只能说明是Socket的断开需要一定的时间才能完成。如果我在客户端采用自动分配端口的方法,应该不会出现端口被我用尽的情况才对。
另外,我用netstat -a,占用的端口好像也不是很多。
程序执行一段时间之后,我运行netstat -a,会发现有很多端口处于Listening状态,
最严重的情况下,客户端无法连接,这时候再查,就会发现大约从1000到5000之间的
所有端口都是listening状态。
我怀疑,服务器端监听端口,客户端请求连接的时候,服务器另外分配了一个端口
(1000-5000之间),但是客户端断开连接时,尽管服务器端执行了一系列命令:
pServerSocket->ShutDown(2);
pServerSocket->Close();
但是其所占用的端口仍然没有释放,这样,导致可用端口越来越少,最后就不能用了。
还有一个现象,并不是一次连接就会占用一个端口,好像是一个端口用几次以后就再也不能用了。这是什么原因?怎么才能真正释放掉呢?
我查了一下msdn,发现只有LISTEN状态,不知二者之间是什么关系?
关闭socket,用netstat -a检查也是有n个处于listening 状态你的程序中间有没有return,break之类的呀?及出现异常后没有释放socket,我上次就是出现了这个错误,程序运行3天后就不正常了,改了以后一直正常的运行着,
不知对你有没有帮助.