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

SetverSocket和ClientSocket的奇怪現象?

尚未結案
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-06 00:26:40 IP:219.86.xxx.xxx 訂閱
我使用SetverSocket和ClientSocket元件,寫一個簡單的傳遞資訊的程式. 但程式段在確認Server端是否有開啟,出現了一些錯誤. 底下為程式碼: <textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TForm1::FormCreate(TObject *Sender) { ServerSocket1->Port=100; ServerSocket1->Active=true; ClientSocket1->Address="127.0.0.1"; ClientSocket1->Port=Edit2->Text.ToInt(); ClientSocket1->Active=true; if (ClientSocket1->Socket->Connected) Memo1->Lines->Add("連線成功"); else Memo1->Lines->Add("連線失敗"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (ClientSocket1->Socket->Connected) Memo1->Lines->Add("連線成功"); else Memo1->Lines->Add("連線失敗"); }</textarea> 為什麼FormCreate時,都會出現"連線失敗"的訊息,正常應該要出現"連線成功"才對. 但一定要手動按下Button1才會出現"連線成功". 請問有誰可以跟我講為什麼會這樣呢? 判斷Server是否存在還有什麼比較好的方法呢? 謝謝.
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-06 00:34:22 IP:211.22.xxx.xxx 未訂閱
我的經驗是Form在Create的時候,置於其上的一些VCL元件本身還未完成自身的建構(Construction),因此儘量不要在FormCreate的時候去做一些複雜元件的動作。
要不然就使用DATAMODULE把socket放在裡面,在FORM之前先CREATE起來後USES那個DATAMODULE後使用SOCKET。
編輯記錄
Stallion 重新編輯於 2007-05-06 00:34:53, 註解 無‧
Stallion 重新編輯於 2007-05-06 00:37:31, 註解 改錯字及加入一些說明。 XD‧
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-06 08:38:20 IP:219.80.xxx.xxx 訂閱
請問一下:
1.不知道是否可以寫一個簡單的程式說明呢?
2.判斷Server存在的方法,如果不知道Server IP的話,是否有其它的方式可以取得server狀況?
謝謝.
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-06 10:29:25 IP:211.74.xxx.xxx 未訂閱
TForm Activate 後才會輪到 ClientSocket Connect 所以在此之前
即使你已經把 ClientSocket->Active = true 或是 ClientSocket->Open()
但是實際連結動作並未開始
------
~§~迷時師渡,悟了自渡~§~
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-06 10:45:22 IP:211.22.xxx.xxx 未訂閱
TCP/IP通信最重要的兩個因素就是ip及port,如果不知道ip那要怎麼通信呢?如果client端可以間接取得server端的IP,那麼勢必兩端必須在一個約定好的地點讓client端可以取得server端送來變動的ip及port資訊,如此才有可能聯繫的上。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-06 11:33:08 IP:218.170.xxx.xxx 未訂閱
你知道你叫它 connect 它要做多少事嗎?
你知道你的網路有多快嗎?
就這麼一行,而這一行並不會是處理完才跑下一行的方式。
所以當它跑到下一行時,它的連線還沒完成。
你可以利用 onconnected 那些的 event 去測試。
去修改你的程式。讓你的程式符合你要的動作。
這個我至少已經回了三次了。查一下古文吧。
系統時間:2024-04-25 22:48:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!