請問一下IDUDPSERVER的問題 |
尚未結案
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
再次謝謝Stallion兄及malanlk兄的解答,不過我想可能我的問題不夠清楚,或是我的理解答力太差,在這邊跟兩位說抱歉,尤其是Stallion兄,浪費他這麼多時間。
我的問題是在當我使用IDUDPServer如何要能夠在我停止連線後(IDUDPServer1->Active = false),如何能重新連線,因為在用了IDUDPServer1->Active = true 後,即使對方不停丟資料進來,我也收不到資料,即使IDUDPServer1->Active 的狀態已經是true 了。
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
引言: 謝謝Stallion兄,那我可以在請問一下,可以由Server端作這樣的動作嗎,因為我是Server端,收client端的資料,我的情況是當我斷線後再重新連線時,即使client持續丟資料,我還是收不到,除非我把整個程式重新關掉再啟動,才能收到資料,這是IDUDPServer 的問題嗎,還是只是把IDUDPServer的Active屬性變成True是不夠的,謝謝1.你的問題,我之前已經回答你了,因為在UDP模式,Client或Server端不管是正常或不正常得離線,都要能明確(至少有一方)能掌握,將對方或自己的的Socket給Close掉,因為UDP是Connection less的,依照你的狀況,是Client已經不知道Server已經Down了,還在對原來的Server Socket Handle送東西,所以你的Server再連上線,已經不是原來的Socket Handle,因此你的Client發送東西,Server 端當然收不到。 2.綜上,相反的,當Client端發現Server端不見時,或Server端剛啟動時,要將自己先結束,再重新連上Server。向Malanlk兄做的一樣,是由Server端剛啟動後,先清除所有的連線。 ---------------------------------------------- We will either find a way, or make one. -Hannibal -。 |
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
這是 Indy 9 Help 中對 IUDPServer.Active 的解說
==================================================
Active is a Boolean property used to indicate that the socket binding has been allocated. Note that Active will always return False when using the IDE. 這是 Indy 10 Help 的解說
===================================================
Active is a Boolean property used to indicate if the socket binding has been allocated for the UDP client. Setting Active to True causes the socket handle in Binding to be allocated. Set other property values, like BufferSize and IPVersion, prior to setting Active to True. Setting Active to False will free the socket handle in Binding. Setting Active to True in the IDE (at design-time) has no effect other than storing the property value to be used at runtime. The UDP component cannot allocate its socket handle at design-time
========================================== 先以 Indy 10 的說法來做,
當斷線後連線恢復後, 先將 Active設為 False, 再設回 True 試試. 如果不行, 表示 Indy 9,10 運作模式不一樣了, 之前給你的建議有可能是釋放時 Active=True 造成的, 正確應該是 先設 Active=False ==> 清除 Socket==>Active=True; 如果還是不行, 那就是在清除後, 當Active設為 True 時, 沒有自動再重新配置 Socket..... 這比較棘手, 先試試, 結果說一下...
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |