全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4176
推到 Plurk!
推到 Facebook!

TServerSocket, TClientSocket 的問題

尚未結案
soonly
一般會員


發表:19
回覆:15
積分:6
註冊:2002-12-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-29 19:35:19 IP:203.73.xxx.xxx 未訂閱
各位大大, 我試著用 TServerSocket, TClientSocket 個別撰寫 Server 與 Client 的程式 我想將 Server 程式灑到許多台電腦中, 而 Client 利用 Polling Server ip 位址的方式,分別詢問所有的Server,能不能建立連線,程式如下 for i:=20 to 220 do begin if i=127 then continue; try straddr := format('192.168.1.%d',[i]); ClientSocket1.Address := straddr; ClientSocket1.Port := 3333; ClientSocket1.Active := True; except on E: Exception do showMessage(E.Message); end; end; 若某台電腦沒有啟動 Server 時就會出現這樣的 Exception Project client.exe raised exeception class ESocketError with message 'Asynchronous socket error 10061' 在我的try...execept 中攔不到...請問我該如何是好.. 另外請問各位大大要怎樣偵測對方有沒有執行 Server 程式,以建立連線呢? 還有用這樣的 Polling 方式是正確的嗎? 還是有更好的方式.., 或是類似廣播的方式.. 希望各位大大為小弟解惑
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-29 21:47:13 IP:218.166.xxx.xxx 未訂閱
這樣polling 的方式,就我來說,我也會這樣做 但我應該不會用連線的方式去做 我可能會先用ping的方式,也確定server 能有回應之後 我才會去對他做連線 還有就是你提到的例外攔不下來的問題 也許,你可以試看看這樣 Tools->Debugger Options->Language Exceptions->Add 把你的例外加到這個裏面,用這來試看看.. 有的例外會因為這樣,就不會出現了,有的會再出現一個 可以捉到的例外,要請您試看看,我不確定對你有用 但我的Indy元件是這樣做的
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-30 00:07:36 IP:218.17.xxx.xxx 未訂閱
引言: 若某台電腦沒有啟動 Server 時就會出現這樣的 Exception Project client.exe raised exeception class ESocketError with message 'Asynchronous socket error 10061' 在我的try...execept 中攔不到...請問我該如何是好..
try do someting except xxxxxx end; 这里,如果拦截不到,你可以考虑使用 Applicaiont.OnException来处理。
cuteysc
初階會員


發表:16
回覆:37
積分:35
註冊:2003-05-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-30 03:26:43 IP:61.216.xxx.xxx 未訂閱
引言: 若某台電腦沒有啟動 Server 時就會出現這樣的 Exception Project client.exe raised exeception class ESocketError with message 'Asynchronous socket error 10061' 在我的try...execept 中攔不到...請問我該如何是好..
TServerSocket 或是 TClientSocket 的錯誤可以使用 OnError 事件觸發攔截 當發生錯誤時他會觸發 OnError 事件 若您希望自定錯誤處理或是分析錯誤碼, 請於 OnError 加入以下程式碼: //--------------------------------------------------------------------------- void __fastcall TForm1::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) { if(ErrorCode==10061) { // (您的處理程式碼) } else if(ErrorCode==10054) { // (您的處理程式碼) } //..... 依此類推 //記得處理完後將 ErrorCode 歸 0, 這樣就不會出現錯誤視窗 ErrorCode=0; Socket->Close(); // 然後會產生 OnDisconnect 事件 } //--------------------------------------------------------------------------- Y.S.C.
現任:Programmer 深度論壇 BCB Internet 版主
http://www.chatking.net 聊天王 語音聊天社群 創辦人
renth555
一般會員


發表:32
回覆:65
積分:19
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-21 20:20:24 IP:61.56.xxx.xxx 未訂閱
我也有相同問題 我出現的訊息是 Project client.exe raised exeception class ESocketError with message 'Asynchronous socket error 1101' 我無法在 ClientSocket1Error 事件中攔截到錯誤碼 如果是system的例外處理做攔截 Applicaiont.OnException 我要如何做呢 奇怪的是 我故意把網路線拔掉讓他出現錯誤訊息 ClientSocket1->Host="www.kimo.com.tw"; <----這樣的設定 ClientSocket1Error 事件 攔截不到 ClientSocket1->Host="192.168.123.111"; <-----這樣的設定就可以攔截到 以上問題小弟很久了一直找不到原因 真想知道這個問題與解決這個錯誤 請各位前輩幫幫忙 我用 BCB5 寫的
soonly
一般會員


發表:19
回覆:15
積分:6
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-23 10:16:57 IP:203.73.xxx.xxx 未訂閱
我想你在 TClientSocket 的 OnError 中攔看看,我之前的問題,在那裡就可以攔到. 如果還攔不到,把你的問題詳細的POST出來,這裡有很多很有經驗的大大,可以為你解題... 祝你好運..
oioio2
一般會員


發表:0
回覆:11
積分:2
註冊:2004-09-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-03 14:06:19 IP:218.172.xxx.xxx 未訂閱
我也遇到這個問題,經過多番嘗試, 只要先指定 ClientSocket1->ClientType = ctNonBlocking; 就可以在 ClientSocket1 的 OnError event 攔截處理, 不過還是無法在 try ... catch 攔截到錯誤。 TClientSocket::ClientType Specifies whether the client socket reads and writes information asynchronously over the socket connection. enum TClientType { ctNonBlocking, ctBlocking }; __property TClientType ClientType = {read=GetClientType, write=SetClientType, nodefault}; Description Set ClientType to ctNonBlocking to enable the client socket to respond to asynchronous reading and writing events. When ClientType is ctNonBlocking, execution is not blocked by reading and writing over the socket connection. OnRead or OnWrite events occur when the socket needs to read or write over the connection. Set ClientType to ctBlocking to force all reading and writing to occur synchronously. It is a good idea to include the client socket object in a thread if the ClientType is ctBlocking, so that I/O does not block all execution within the client application. When ClientType is ctBlocking, use a TWinSocketStream object for reading and writing. TWinSocketStream prevents the application from hanging indefinitely if a problem occurs while reading or writing. It also can wait for the socket connection to indicate its readiness for reading. Use a non-blocking socket when the socket needs to synchronize reading and writing with server sockets.
Ktop_Robot
站務副站長


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

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


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


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


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

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