TServerSocket, TClientSocket 的問題 |
尚未結案
|
soonly
一般會員 發表:19 回覆:15 積分:6 註冊:2002-12-11 發送簡訊給我 |
各位大大,
我試著用 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 發送簡訊給我 |
這樣polling 的方式,就我來說,我也會這樣做
但我應該不會用連線的方式去做
我可能會先用ping的方式,也確定server 能有回應之後
我才會去對他做連線 還有就是你提到的例外攔不下來的問題
也許,你可以試看看這樣
Tools->Debugger Options->Language Exceptions->Add
把你的例外加到這個裏面,用這來試看看..
有的例外會因為這樣,就不會出現了,有的會再出現一個
可以捉到的例外,要請您試看看,我不確定對你有用
但我的Indy元件是這樣做的
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
引言: 若某台電腦沒有啟動 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 發送簡訊給我 |
引言: 若某台電腦沒有啟動 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 發送簡訊給我 |
我也有相同問題 我出現的訊息是 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 發送簡訊給我 |
|
oioio2
一般會員 發表:0 回覆:11 積分:2 註冊:2004-09-08 發送簡訊給我 |
我也遇到這個問題,經過多番嘗試,
只要先指定
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |