請問要如何動態產生TClientSocket ? |
答題得分者是:gemi0305
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
範例,請在form中加一個timer、一個memo,一個button
h檔,加入下列程式,
#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #includecpp檔: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Timer1->Enabled=false; Timer1->Interval=500; //視連線情況調整 } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { for(int i=0; i<12; i ) //以12個例 { TClientSocket *pDynamicClient; pDynamicClient = new TClientSocket(this); pDynamicClient->Name="Client" IntToStr(i); pDynamicClient->Address="127.0.0.1"; pDynamicClient->Port=7717; pDynamicClient->OnRead = &ClientSocket1Read; pDynamicClient->OnConnect= &ClientSocket1Connect; pDynamicClient->Open(); Timer1->Enabled=true; ShowMessage("Connect"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) { Memo1->Lines->Add( Socket->LocalAddress ":" IntToStr(Socket->LocalPort) "is connecting to Server" ); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { SendMessage(GetActiveWindow(), WM_CLOSE, 0, 0); Timer1->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { int len=Socket->ReceiveLength(); BYTE *ptr = new BYTE[len]; } //---------------------------------------------------------------------------國泰平安 |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
指定Client7送資料
傳送資料不需要用到OnWrite事件,
這個範例是很好用的「使用動態元件的方法」
請好好利用
void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString ClientName="Client7"; for (int i=0;i國泰平安 發表人 - Gemi0305 於 2003/09/08 17:33:46 |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
在請問一下我寫了下列程式,結果沒資料送出
void __fastcall TfrmSim::btnConnectClick(TObject *Sender) { //connect & send information if(edtIP->Text.IsEmpty()) { ShowMessage("Sever IP is empty !"); return; } else { for(int i=1;i<=edtIP->Text.Length();i ) { if(!(edtIP->Text.SubString(i,1)>="0" && edtIP->Text.SubString(i,1)<="9" || edtIP->Text.SubString(i,1)==".")) { ShowMessage("Invalid IP"); return; } } } if((cmbID->ItemIndex == -1) || (cmbID->ItemIndex >= MAX_Control)) { ShowMessage("No select GDT !"); return; } char Buf[500]={0}; int len,ptr = cmbID->ItemIndex; fpBuf.Leading = Header; fpBuf.Control = DATA; fpBuf.To = Peer; fpBuf.Length = sizeof(GDT_Type); fpBuf.SenderSN = 0; fpBuf.ReceiverSN = 0; fpBuf.Type = GDT_Info; Trail = Trailer; memmove((char *)Buf,(char *)&fpBuf,sizeof(fpBuf)); memmove((char *)Buf sizeof(fpBuf),(char *)(GDT ptr),sizeof(GDT_Type)); CRC = CRC_Compute((char *)Buf,sizeof(fpBuf) fpBuf.Length); memmove((char *)Buf sizeof(fpBuf) fpBuf.Length,(char *)&CRC,sizeof(CRC)); memmove((char *)Buf sizeof(fpBuf) fpBuf.Length sizeof(CRC),(char *)&Trail,sizeof(Trail)); len = sizeof(fpBuf) fpBuf.Length sizeof(CRC) sizeof(Trail); AnsiString ClientName = "Client" IntToStr(ptr); for(int i=0;i |
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
我是用看的,
你是跟本就沒連上去...
我在第一篇新增的程式中,在 pDynamicClient->Open();
下面有兩行,是很重要的兩行,
Timer1->Enabled=true; ShowMessage("Connect");少了這兩行你動態新増的Client是連不上server的, 所以你要在 ConnectClient->Open();下面 加這兩行,如果你要手動關到ShowMessage的話,加一行 ShowMessage("Connect"); 就可以了timer不用加 國泰平安 |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
一樣,ShowMessage()是一定要加的,
我所謂的手動,是說用手動關掉ShowMessage(),
但你也可以用timer自動把ShowMessage()給關掉,就像第一個範例,
你會發現ShowMessage()會自動出來,又自動被關掉, 其作用,就是在幫助Client連線到Server,
因為在bcb裡,如果你Open()之後,不讓他有個小間隔,是連不上server的,
以前我也是找了很久才找到這個方法,
所以在ShowMessage()是加在Open()後面,接下來,就只是要等多久了,
我從新竹連高雄,最多二秒...所以最多二秒就可以關這個ShowMessage() 開會去...*忙* 國泰平安
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |