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

如何使用IdTCPSever 取得傳輸資料過來的電腦後ip

答題得分者是:RaynorPao
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-18 23:10:23 IP:218.162.xxx.xxx 未訂閱
各位大大: 請問一下,我利用IdUDPServer廣播給多台client,再利用五個IdTCPServer port來接收各台傳回的圖片...現在我有個問題就是我該如何把接收到的圖片利用ip來區分開..IdTCPServer有提供遠端電腦ip的方法嗎? 請各位大大救救我。 謝謝
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-18 23:17:57 IP:61.221.xxx.xxx 未訂閱
引言: 各位大大: 請問一下,我利用IdUDPServer廣播給多台client,再利用五個IdTCPServer port來接收各台傳回的圖片...現在我有個問題就是我該如何把接收到的圖片利用ip來區分開..IdTCPServer有提供遠端電腦ip的方法嗎? 請各位大大救救我。 謝謝
all 你好: 試試看這樣寫行不行呢?? >>>>
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-19 00:54:02 IP:218.162.xxx.xxx 未訂閱
Raynor大大請問一下,此行指令是寫在IdTCPServer1Execute中嗎?? 我試過了,只可以寫到AThread->Connection之後就找不到Socket了.. 不好意思,我也是BCB的新手..請你多多幫忙了 謝謝
RaynorPao
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-19 08:16:49 IP:203.73.xxx.xxx 未訂閱
引言: Raynor大大請問一下,此行指令是寫在IdTCPServer1Execute中嗎?? 我試過了,只可以寫到AThread->Connection之後就找不到Socket了.. 不好意思,我也是BCB的新手..請你多多幫忙了 謝謝
all 你好:
(1)請問你是用哪一個版本的 Indy 元件呢,小弟我是使用 Indy V9.0.14
(2)如果你想更新到 V9.0.14 的話可以先到這裡下載
   http://www.indyproject.org/download/Indy9.html
(3)安裝有問題的話,可以參考這篇文章中的說明
   >    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-19 19:22:48 IP:218.162.xxx.xxx 未訂閱
RaynorPao 大大不好意思,我不知道怎麼看indy的版本。我是直接用bcb 6.0內的元件..我也有照教學文件更新成9.0的版本,但是我的程式會出錯...所以請問還有其他的方法嗎?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-19 19:40:19 IP:140.135.xxx.xxx 未訂閱
all您好:   
引言:但是我的程式會出錯...所以請問還有其他的方法嗎?
RaynorPao版主雖然很神很厲害,但是您也應該多給點提示吧< > 例如:貼上您的程式碼,或是整個專案上傳到[會員求助程式檔案上傳區] 順心< > ~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 - taishyang 於 2003/09/19 19:41:07
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-19 20:15:46 IP:218.162.xxx.xxx 未訂閱
taishyang大大: 我只是想問看看有沒有辦法利用IdTCPSever元件來求得與之連線的IdTCPClient的ip而已...因為我有很多台client一起連上開有五個port的server,並且傳圖....我想利用ip把圖檔的名字區分開來..就這樣 如果需要程式碼的話,請告知一聲,我馬上po 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-19 20:27:00 IP:140.135.xxx.xxx 未訂閱
all您好:  會請您將程式碼貼上來是因為您說您的程式碼會出錯,  但是為什麼會錯,若沒有程式碼來當輔助說明很難看的出來吧
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-19 21:14:55 IP:218.162.xxx.xxx 未訂閱
各位大大:   我的程式如下...因為程式很長,所以錯誤在那我也不知道....po上來麻煩各位大大幫我看一下,謝謝     p.s如果我用indy9.0來改的話會出現linking error的錯誤..用回原來的版本就可以了。    
 //server---------------------------------------------------------------------------    #include 
#pragma hdrstop
#include "jpeg.hpp"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
AnsiString IP;
int i=1;
//---------------------------------------------------------------------------
__//---------------------------------------------------------------------------        void __fastcall TForm2::ServerSocket1Listen(TObject *Sender,
      TCustomWinSocket *Socket)
{
IP=Socket->LocalHost;
}
//-------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
IdUDPServer1->DefaultPort=4000;
IdUDPServer1->Active=true;
IdTCPServer1->DefaultPort=4500;
IdTCPServer1->Active=true;
IdTCPServer2->DefaultPort=4600;
IdTCPServer2->Active=true;
IdTCPServer3->DefaultPort=4700;
IdTCPServer3->Active=true;
IdTCPServer4->DefaultPort=4800;
IdTCPServer4->Active=true;
IdTCPServer5->DefaultPort=4900;
IdTCPServer5->Active=true;
}    void __fastcall TForm2::IdTCPServer1Execute(TIdPeerThread *AThread)
{
         TMemoryStream *ms1=new TMemoryStream;
         AThread->Connection->ReadStream(ms1, -1, false);
         ms1->Position=0;
         TJPEGImage *jpg = new TJPEGImage();
         jpg->LoadFromStream(ms1);
         jpg->CompressionQuality=100;
         jpg->SaveToFile("C://錄影/" IntToStr(i) ".jpeg");
         delete jpg;
         delete ms1;
         i  ;
    }
//---------------------------------------------------------------------------    void __fastcall TForm2::FormDestroy(TObject *Sender)
{     IdTCPServer1->Active=false;
 IdUDPServer1->Active=false;
 IdTCPServer2->Active=false;
 IdTCPServer3->Active=false;
 IdTCPServer4->Active=false;
 IdTCPServer5->Active=false;     }
//---------------------------------------------------------------------------    void __fastcall TForm2::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
ListBox1->Items->Add(Socket->RemoteAddress);
        
}
//---------------------------------------------------------------------------    void __fastcall TForm2::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
for(int i=0;iItems->Count;i  )
   {
   if (ListBox1->Items->Strings[i] == Socket->RemoteAddress)
   {
   ListBox1->Items->Delete(i);}
   }
}
//---------------------------------------------------------------------------    void __fastcall TForm2::IdTCPServer2Execute(TIdPeerThread *AThread)
{             TMemoryStream *ms1=new TMemoryStream;
         AThread->Connection->ReadStream(ms1, -1, false);
         ms1->Position=0;
         TJPEGImage *jpg = new TJPEGImage();
         jpg->LoadFromStream(ms1);
         jpg->CompressionQuality=100;
         jpg->SaveToFile("C://錄影/" IntToStr(i) ".jpeg");
         delete jpg;
         delete ms1;
         i  ;    }
//---------------------------------------------------------------------------    void __fastcall TForm2::IdTCPServer3Execute(TIdPeerThread *AThread)
{
 TMemoryStream *ms1=new TMemoryStream;
         AThread->Connection->ReadStream(ms1, -1, false);
         ms1->Position=0;
         TJPEGImage *jpg = new TJPEGImage();
         jpg->LoadFromStream(ms1);
         jpg->CompressionQuality=100;
        jpg->SaveToFile("C://錄影/" IntToStr(i) ".jpeg");
         delete jpg;
         delete ms1;
         i  ;        
}
//---------------------------------------------------------------------------    void __fastcall TForm2::IdTCPServer4Execute(TIdPeerThread *AThread)
{
 TMemoryStream *ms1=new TMemoryStream;             AThread->Connection->ReadStream(ms1, -1, false);
         ms1->Position=0;
         TJPEGImage *jpg = new TJPEGImage();
         jpg->LoadFromStream(ms1);
         jpg->CompressionQuality=100;
         jpg->SaveToFile("C://錄影/" IntToStr(i) ".jpeg");
         delete jpg;
         delete ms1;
         i  ;        
}
//---------------------------------------------------------------------------    void __fastcall TForm2::IdTCPServer5Execute(TIdPeerThread *AThread)
{
 TMemoryStream *ms1=new TMemoryStream;
         AThread->Connection->ReadStream(ms1, -1, false);
         ms1->Position=0;
         TJPEGImage *jpg = new TJPEGImage();
         jpg->LoadFromStream(ms1);
         jpg->CompressionQuality=100;
         jpg->SaveToFile("C://錄影/" IntToStr(i) ".jpeg");
         delete jpg;
         delete ms1;
         i  ;        
}
//---------------------------------------------------------------------------        void __fastcall TForm2::Timer1Timer(TObject *Sender)
{    IdUDPServer1->Broadcast(IP,4000);    }
//---------------------------------------------------------------------------    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{     Application->Terminate();
}
//---------------------------------------------------------------------------    void __fastcall TForm2::Button2Click(TObject *Sender)
{
IdUDPServer2->DefaultPort=4100;
IdUDPServer2->Active=true;
IdUDPServer2->Broadcast("start",4100);
}
//---------------------------------------------------------------------------    void __fastcall TForm2::Button3Click(TObject *Sender)
{
IdUDPServer2->DefaultPort=4100;
IdUDPServer2->Active=true;
IdUDPServer2->Broadcast("stop",4100);    }
//---------------------------------------------------------------------------    //client
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
const int ID=WM_USER 100;
int i=1;
AnsiString j;
AnsiString sz;
AnsiString az;
int cip;
AnsiString host;
int host1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
::RegisterHotKey(Handle,ID,MOD_CONTROL,VK_F8);
}    void __fastcall TForm1::FormDestroy(TObject *Sender)
{
::UnregisterHotKey(Handle,ID);
IdUDPServer1->Active=false;
ClientSocket1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::HotKeys(TMessage &msg)
{
TForm::Dispatch(&msg);
::SetForegroundWindow(Handle);
if(::IsIconic(Application->Handle))
 ::ShowWindow(Application->Handle,SW_RESTORE);
else
 ::ShowWindow(Application->Handle,SW_MINIMIZE);    }    void __fastcall TForm1::FormActivate(TObject *Sender)
{
  MkDir("C://錄影");
::ShowWindow(Application->Handle,SW_HIDE);
 ::ShowOwnedPopups(Application->Handle,false);    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{     TJPEGImage *jp = new TJPEGImage();
  Graphics::TBitmap *bmpBuf;
  TMemoryStream *ms1=new TMemoryStream;
  HDC hdc;
  int x,y;
  hdc=::GetDC(0);
  x=Screen->Width;
  y=Screen->Height;
  bmpBuf=new Graphics::TBitmap;
  bmpBuf->Handle=::CreateCompatibleBitmap(hdc, x, y);
  ::BitBlt(bmpBuf->Canvas->Handle, 0, 0, bmpBuf->Width, bmpBuf->Height, hdc, 0, 0, SRCCOPY);
  jp->Assign(bmpBuf);
  jp->CompressionQuality = 10;  // 設定圖像解析度(檔案大小)
  jp->Compress();
  jp->SaveToStream(ms1);
  j=AnsiString(i);
  DeleteDC(hdc);
  delete bmpBuf;
  i  ;
  delete jp;
  IdTCPClient1->Connect();
  IdTCPClient1->WriteStream(ms1, true, true );
  IdTCPClient1->Disconnect();
 }    //---------------------------------------------------------------------------    void __fastcall TForm1::NMMSGServ1MSG(TComponent *Sender,
      const AnsiString sFrom, const AnsiString sMsg)
{
int i;    i=StrToInt(sMsg);
Timer1->Interval=i*1000;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
      TStream *AData, TIdSocketHandle *ABinding)
{       sz.SetLength(AData->Size);
   AData->Read(&sz[1], AData->Size);
   IdTCPClient1->Host=sz;
   ClientSocket1->Host=sz;
   ClientSocket1->Active=true;       }
//--------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
cip=ClientSocket1->Socket->LocalAddress.Length();
host=ClientSocket1->Socket->LocalAddress.SubString(cip,cip);
host1=StrToInt(host)%5;
Label1->Caption=IntToStr(host1);    if(host1==0){
IdTCPClient1->Port=4500;
}
if(host1==1){
IdTCPClient1->Port=4600;
}
if(host1==2){
IdTCPClient1->Port=4700;
}
if(host1==3){
IdTCPClient1->Port=4800;
}
if(host1==4){
IdTCPClient1->Port=4900;
}    }
//---------------------------------------------------------------------------    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ShowMessage("連線錯誤");
}
//---------------------------------------------------------------------------        void __fastcall TForm1::IdUDPServer2UDPRead(TObject *Sender,
      TStream *AData, TIdSocketHandle *ABinding)
{
  az.SetLength(AData->Size);
   AData->Read(&az[1], AData->Size);
   if(az=="start"){
   Timer1->Enabled=true;}
   if(az=="stop"){
   Timer1->Enabled=false;}
}
//---------------------------------------------------------------------------    
all
一般會員


發表:10
回覆:11
積分:4
註冊:2003-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-20 10:52:42 IP:218.162.xxx.xxx 未訂閱
謝謝各位大大,我已經找到解決的方法了^^
系統時間:2024-04-29 23:45:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!