高分求解, 关于端口释放问题(100分)

  • 主题发起人 主题发起人 songmk
  • 开始时间 开始时间
S

songmk

Unregistered / Unconfirmed
GUEST, unregistred user!
我用indy的TcPserver 做了一个服务器端的程序, 所用端口号是 1893

但现在发现一个问题就是: 我重新启动服务器后,用netstat发现已经有两个客户端连到1893这个
端口了(我的程序还没有启动), 现在我启动我的程序就会报 socket 10013 error ,access diney
我看是端口好像被占用了。
我想每次启动程序的时候,如果是这样的情况就先reset一下这个端口,然后我再用

用程序怎么实现?

解决了分可以再加
 
通讯结束后,一定要Closesocket(socketname);
程序退出或结束时,记得 Closesocket(socketname);强行结束对话。
程序在创建SOCKET的五元组是,及绑定端口时,如果失败:
可以再试着绑定另外的端口;
 
如果已经有用户连上了这个端口,但这时我的程序还没有启动。
服务器端口是固定的,我不能绑定其他的端口
关键是我怎么强行断掉这些连接,然后再绑定这个端口
 
如果不是你的程序连接这个端口,你无法获得此端口,你可以尝试顺序搜索其他端口,直到找到自由的为止。
1893一般没有程序占用,可能是你的程序有问题。
 
我的意思是这样的: 客户端软件已经有好多用户了,他们尝试连接的时候恰好我的服务器端还没有
启动,结果他们还是连接上1893端口了。结果导致我的服务器端的程序不能绑定这个端口

怎么解决这个问题?

我想如果客户端能发现服务器端没启动,然后自己断掉这个连接就可以了
我用的是 indy的TcPserver和TCPClient
 
學習學習
 
我有办法解决这个问题,你在套接字帮定之前设置一个参数就可以避免这个问题
参数是:SO_REUSEADDR
 
to: 张无忌,

说清楚点啊, 在 TCPClient 的哪个属性设置这个值? 还是 TCPServer ?

不明白啊
-------------
我有办法解决这个问题,你在套接字帮定之前设置一个参数就可以避免这个问题
参数是:SO_REUSEADDR
 
如果你没有其他程序打开了这个端口,客户是不能连接的上的。最简单的方法
就是关闭这些程序,释放端口。如果是要在你自己那个程序关闭该端口,不好
意思,我也不懂,帮不了你!
 
//现在我启动我的程序就会报 socket 10013 error ,access diney
//我看是端口好像被占用了。

端口被占用不是这个错误

 
是不是其他程序占用了这个端口?
端口没开客户端怎么能连上呢?
 
同意张无忌
直接调用API函数SetSockOpt设置Socket选项SO_REUSEADDR,可以重用已使用的端口
 
仔细检查自己的程序吧?REUSER治标不治本吧??
 
拜托,几位高手,能不能给出一段代码,来说明在使用isTCPClient的情况下,怎样让端口及时释放?
 
哪位高手在啊?急等回复。。。
 
用此方法试试:
ServerSocket_Host.Socket.Connections[0].Disconnect(socket:TSocket);
 
后退
顶部