關於Socket->LocalAddress 的問題 |
答題得分者是:RaynorPao
|
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: Dears: Socket->LocalAddress 是擷取本機端的IP 不過為何我連線之後擷取到的IP是0.0.0.0呢? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! leeli 你好: (1)請問?? 你是用 TServerSocket/TClientSocket 哪一個元件呢?? 你是在哪一 個步驟擷取本端的 IP 呢?? 方便把你的相關程式碼貼上來嗎?? ( > #>>>>>>>>>>>> < class="code"> 備註: (1)還要利用 Project Manager 把以下的檔案 Add 到你的 Project 裡面 C:\Program Files\Borland\CBuilder6\Lib\Psdk\iphlpapi.lib (2)有興趣的話,也看看 M$DN 中的說明 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getipaddrtable.asp-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/08/28 22:25:00
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
引言: (1)請問?? 你是用 TServerSocket/TClientSocket 哪一個元件呢?? 你是在哪一 個步驟擷取本端的 IP 呢?? 方便把你的相關程式碼貼上來嗎?? (2)如果只是單純的想要得到本機的 IP Address 有其他的方法喔 (可以利用 IP Helper API 達到目的)Dear RaynorPao: (1)我是使用TServerSocket的元件。我有在 __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { StatusBar1->Panels->Items[1]->Text = "本地IP:" ServerSocket1->Socket->LocalAddress; } 放過。有在: void __fastcall TForm1::BitBtn1Click(TObject *Sender) { mode = 1; Ritem = 0; ServerSocket1->Port = Edit1->Text.ToInt(); ServerSocket1->Active = true; StatusBar1->Panels->Items[1]->Text = "本地IP:" ServerSocket1->Socket->LocalAddress; } 有在OnListen事件中。 不過得到的都是0.0.0.0 (2)我使用大大的程式碼,沒有做修改。可是每次一執行,ShowMessage就會出現三次。而且一開始IP是0.0.0.0。第二次是正確的。第三次就不知道是哪裡的IP了。以下是我的程式碼:(我用的是BCB5.0) void __fastcall TForm1::BitBtn1Click(TObject *Sender) { ServerSocket1->Port = Edit1->Text.ToInt(); ServerSocket1->Active = true; StatusBar1->Panels->Items[0]->Text = "資料接收中"; BitBtn1->Enabled = false; BitBtn2->Enabled = true; BitBtn3->Enabled = false; PMIB_IPADDRTABLE mit=NULL; DWORD dwSize=0; GetIpAddrTable(NULL, &dwSize, TRUE); mit=(PMIB_IPADDRTABLE)new BYTE[dwSize]; String szAddr; if(NO_ERROR==GetIpAddrTable(mit, &dwSize, TRUE)); { for(int i=0; i<(int)mit->dwNumEntries; i ) { szAddr=IntToStr(mit->table[i].dwAddr & 0xFF) "." IntToStr(mit->table[i].dwAddr>>8 & 0xFF) "." IntToStr(mit->table[i].dwAddr>>16 & 0xFF) "." IntToStr(mit->table[i].dwAddr>>24 & 0xFF); StatusBar1->Panels->Items[1]->Text = "本地IP:" szAddr; ShowMessage("IP Addr: " szAddr); } } delete mit; } 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言:leeli 你好: 試試改成上面這樣子可不可以呢?? --Dear RaynorPao: (1)我是使用TServerSocket的元件。我有在 __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { StatusBar1->Panels->Items[1]->Text = "本地IP:" ServerSocket1->Socket->LocalAddress; } 放過。有在: void __fastcall TForm1::BitBtn1Click(TObject *Sender) { mode = 1; Ritem = 0; ServerSocket1->Port = Edit1->Text.ToInt(); ServerSocket1->Active = true; StatusBar1->Panels->Items[1]->Text = "本地IP:" ServerSocket1->Socket->LocalAddress; } 有在OnListen事件中。 不過得到的都是0.0.0.0 (2)我使用大大的程式碼,沒有做修改。可是每次一執行,ShowMessage就會出現三次。而且一開始IP是0.0.0.0。第二次是正確的。第三次就不知道是哪裡的IP了。以下是我的程式碼:(我用的是BCB5.0) void __fastcall TForm1::BitBtn1Click(TObject *Sender) { ServerSocket1->Port = Edit1->Text.ToInt(); ServerSocket1->Active = true; StatusBar1->Panels->Items[0]->Text = "資料接收中"; BitBtn1->Enabled = false; BitBtn2->Enabled = true; BitBtn3->Enabled = false; PMIB_IPADDRTABLE mit=NULL; DWORD dwSize=0; GetIpAddrTable(NULL, &dwSize, TRUE); mit=(PMIB_IPADDRTABLE)new BYTE[dwSize]; String szAddr; if(NO_ERROR==GetIpAddrTable(mit, &dwSize, TRUE)); { for(int i=0; i<(int)mit->dwNumEntries; i ) { if((mit->table[i].dwAddr & 0xFF)!=0 && (mit->table[i].dwAddr & 0xFF)!=127) { szAddr=IntToStr(mit->table[i].dwAddr & 0xFF) "." IntToStr(mit->table[i].dwAddr>>8 & 0xFF) "." IntToStr(mit->table[i].dwAddr>>16 & 0xFF) "." IntToStr(mit->table[i].dwAddr>>24 & 0xFF); StatusBar1->Panels->Items[1]->Text = "本地IP:" szAddr; ShowMessage("IP Addr: " szAddr); } } } delete mit; } 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |