線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1357
推到 Plurk!
推到 Facebook!

请指教,关于IndyTCPClient控件运行时非法操作的问题!

尚未結案
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-18 18:08:34 IP:218.2.xxx.xxx 未訂閱
请各位高手指点一下,我实在是不知道怎么办了,可能水平太差了吧。。。>''
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-18 20:52:42 IP:221.226.xxx.xxx 未訂閱
好失望啊,等了3个小时一个回复都没,难道没人会吗?唉。。。怎么办啊。。。 發表人 - jackalan 於 2004/03/18 20:54:26
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-18 22:40:08 IP:61.221.xxx.xxx 未訂閱
jackalan 你好:
(1)TIdTCPClient 這個元件的確是沒有 OnExecute 事件所對應的 event
   procedure
(2)所以,建議你反過來設計,讓 Client 端週期性 (例如: 每隔 10 秒) 的向
   Server 端發送訊息,然後 Server 端在 OnExecute 事件所對應的 event
   procedure 裡面回應 Client 一個 ACK,讓彼此都知道尚未不正常斷線!!
(3)所以你在 Server 端要做一個計數器,記錄所有連上來的 Client 已經多久
   沒有發送訊息,當超過一定的秒數 (例如: 20 秒) 沒有收到某個 Client 的
   訊息的話,就判定該 Client 已經不正常斷線!!
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/18 22:43:22
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-19 07:40:39 IP:218.2.xxx.xxx 未訂閱
版主您好! 我现在的确是这样做的,但我的问题并不在这里,由于在客户端我需要实时接受服务端的命令,所以只好不断读取READLN('',1),来判断有无命令过来,但运行大约4到5分钟客户端就非法操作了,我怀疑是不是多次不断的READLN会出问题,开始我用线程做的过后改用TIMER作,接受的时间改成100MS还是出错,请版主帮忙看看,应该怎么做?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-19 14:03:44 IP:203.73.xxx.xxx 未訂閱
引言: 版主您好! 我现在的确是这样做的,但我的问题并不在这里,由于在客户端我需要实时接受服务端的命令,所以只好不断读取READLN('',1),来判断有无命令过来,但运行大约4到5分钟客户端就非法操作了,我怀疑是不是多次不断的READLN会出问题,开始我用线程做的过后改用TIMER作,接受的时间改成100MS还是出错,请版主帮忙看看,应该怎么做?
jackalan 你好: 那...要不要先試試 TIdUDPServer 元件的做法? src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-19 18:13:55 IP:218.2.xxx.xxx 未訂閱
谢谢版主,我去看过了,但是目前是要改元件会很麻烦,因为已经写了很多代码了,这个问题是在测试时运行时间长了才发现的。不知道INDYTCPCLIENT这个控件在一直读READLN时会不会占用什么资源?为什么运行短时间很正常长了就不行了,因为程序可能要24小时运行所以没办法。 请问一个其它问题,INDY控件的WRITELN发送STRING有无长度限制?谢谢!
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-20 12:08:27 IP:218.2.xxx.xxx 未訂閱
我试了一下WRITELN发送STRING应该有长度限制的,后来改用STRING流发送就不会出错。。。
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-21 12:46:28 IP:211.76.xxx.xxx 未訂閱
或許換個方向思考 在IdTCPServer的OnExecute事件裡,可以得知目前是哪個Client端正在觸發 所以在這個 Event 裡,可以得知有哪個 Client端 有多久沒有送資料上來 若超過自己設定的time out時間,server可以關閉此連線,或者送訊息給該 Client端,等對方的ack。 而Client端部份,可以試著將polling timer設長(1秒或3秒),甚至可以在on timer 裡用thread的方式,執行IdTCPClient.ReadLn。
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-21 17:49:51 IP:218.2.xxx.xxx 未訂閱
robert1014,谢谢你的回答,但如果TIMER设定为1秒会不会有消息漏掉?请指点,有没有什么辅助的元件或API可以帮助CLIENT判断是否有服务器消息,真的想不通INDY的TCPCLIENT怎么会不设定类似OnExecute事件????是忘记了还是觉得大家都用不到???或者 >< >< >,。。。。。。晕
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-21 18:10:08 IP:211.76.xxx.xxx 未訂閱
其實IdTCPClient內部都會有暫存的buffer 至於要多久Polling一次,則應該視Server端送出資料 是否頻繁、資料是否相當大等等 如果說,一定要有Event來做的話,是可以試試其他的元件
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-22 21:35:22 IP:218.2.xxx.xxx 未訂閱
谢谢大家的帮忙,我自己搞定了,问题有两个,说出来给大家参考,避免以后出我同样的问题,1、出在WRITELN数据过长,虽然STRING发送没有限制但如果过长还是会没有响应的,应该把过长的STRING分几次发送就可以了。2、服务器接受命令后用LISTBOX存储的,然后由线程慢慢消化,但LISTBOX.ITEM.ADD对长度是有限制的,这个你可以试试就知道了,改成LISTVIEW后解决了这个问题,那个断线的问题就是因为LISTBOX超过长度导致一个异常引起的,呵呵,谢谢大家的帮忙!尤其谢谢版主!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-04-26 13:51:58 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-06 1:23:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!