关于Indy的TCP控件的问题(100分)

  • 主题发起人 主题发起人 whoawho
  • 开始时间 开始时间
W

whoawho

Unregistered / Unconfirmed
GUEST, unregistred user!
在不谈论使用别的控件的情况下,怎么解决如下问题:
一、当在Client端指定了IdTCPClient的端口,怎样能在程序结束后,立即释放端口,以便于程序重新启动能再次使用?见到有的资料说:使用SO_REUSEADDR或者SO_LINGER,但我在Connect之后立即设定了,无果,是不是要在Connect之前设定?该怎么设定?
二、当起动程序后,发现端口已经被使用,能不能有什么办法使它(Reset)?
以上问题均针对Indy的IdTCPClient和IdTCPServer。
 
一.退出前Disconnect就行了.
一般而言,對於TCP Client端,不必指定BoundIP和BoundPort的值,IdTCPClient在連接時會調用Winsock API的bind函數時,會自動設定IP與端口,如果要獲取連接后本機的IP和端口的話,如下調用就行. LocalIP:=IdTCPClient1.Socket.Binding.IP; LocalPort:=IdTCPClient1.Socket.Binding.Port;
二.這是沒有辦法的,除非你能夠獲取該端口綁定后的Socket值,調用Winsock.closeSocket(s:Integer);這不大可能.
其實沒有這個必要,作為客戶端,應該采取如下"三明治"寫法,就不存在你所說的問題:
IdTCPClient1.Connect;
try
......
finally
IdTCPClient1.Disconnect;
end;
 
一、因为一些理由,前提条件是必须指定Client的端口,连接后获取端口的办法我知道;
  该怎么做?
 
做法就是這樣了,使用時連接,通訊完了之后立即斷線.
IdTCPClient1.Connect;
try
......
finally
IdTCPClient1.Disconnect;
end;
 
不是这样的啦:(
Disconnect动作自然是有的的,程序也退出了,在DOS窗口看到这些端口处在TIME OUT状态。
拜托,哪位朋友能给点意见啊?
 
既然處於TimeOut狀態,當然可以能被其它進程綁定了.
 
呵呵,晕。
我问的不是原因,而是办法。
 
这个问题我也见过,它确实在那候着,不过一小段时间后,它会退出。
是不是在结束程序前,把把服务端控件先干掉。
 
不会有什么效果吧?
而且,服务器端也不能停止啊,需要24小时运行的。
总不能因为一个客户端就干掉服务器端?
 
后退
顶部