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

關於Socket->LocalAddress 的問題

答題得分者是:RaynorPao
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-28 16:08:31 IP:210.80.xxx.xxx 未訂閱
Dears: Socket->LocalAddress 是擷取本機端的IP 不過為何我連線之後擷取到的IP是0.0.0.0呢? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-28 19:56:59 IP:61.221.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-01 10:27:13 IP:61.30.xxx.xxx 未訂閱
引言: (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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-01 10:44:20 IP:203.73.xxx.xxx 未訂閱
引言:
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的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
leeli 你好: 試試改成上面這樣子可不可以呢?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-04-20 22:13:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!