Tserver與Tclient 資料傳送與接收的問題? |
答題得分者是:andychang1690
|
kndd
一般會員 發表:4 回覆:8 積分:2 註冊:2004-05-05 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
這不會很難啊,最簡單的方式就是
使用這個聊天室的時候,要先請使用者輸入基本資料
然後存檔 比如說,你按右鍵查基料,就是送一個
[Query] 給他,對方的程式收到 [Query] 不要顯示
然後送出基本資料,可能長這樣
[Reply:Age=22;BirthDay=2005/01/01;!@#!#]
這樣,你收到的時候,一樣,看到 [Replay 就當作傳回基本資料
不要當成聊天內容的一部份 至於,什麼樣的字串要當成自己的指令來用
就自己決定吧,只要留意說,不要是聊天時常用的文句即可
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
kndd:下面範例 傳送方: AnsiString StrText="Birthday=" Birthday "\r\nYearold=" Yearold "\r\n"; Socket->Socket->SendText(Str_->Text); 接收方: void __fastcall TForm1::ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket) { TStrings *Str_; Str_=new TStringList(); Str_->Clear(); if (Str_->Values["Birthday"].IsEmpty()) { // 有傳入生日 ... } if (Str_->Values["Yearold"].IsEmpty()) { // 有傳入年齡 .... } delete Str_; } TString用法本園地說明很多,你可以搜查一下! 請參考!Andy Chang
------
Andy Chang |
kndd
一般會員 發表:4 回覆:8 積分:2 註冊:2004-05-05 發送簡訊給我 |
引言:謝謝您的解答~但是如果Client有很多個人的話,那Server那邊要如何寫呢? 小弟是個剛學程式的新手~很多都語法與資料結構都還不太會~請多多包含kndd:下面範例 傳送方: AnsiString StrText="Birthday=" Birthday "\r\nYearold=" Yearold "\r\n"; Socket->Socket->SendText(Str_->Text); 接收方: void __fastcall TForm1::ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket) { TStrings *Str_; Str_=new TStringList(); Str_->Clear(); if (Str_->Values["Birthday"].IsEmpty()) { // 有傳入生日 ... } if (Str_->Values["Yearold"].IsEmpty()) { // 有傳入年齡 .... } delete Str_; } TString用法本園地說明很多,你可以搜查一下! 請參考!Andy Chang |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
kndd:你可以建立Thread的方式(我建議以Thread方式) 例建立TStrings *Str_; 為全域變數,於.h檔中 private: // User declarations MsgThread *msgthread; //多執行緒程式 //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; extern TStrings* Str_; //--------------------------------------------------------------------------- #endif .Cpp檔 TForm1 *Form1; TStrings* Str_; void __fastcall TForm1::FormCreate(TObject *Sender) { ServerSocket->Active = true ; Str_=new TStringList(); msgthread = new MsgThread(); } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { if (msgthread) msgthread->Terminate(); ServerSocket->Active = false ; delete Str_; } void __fastcall TForm1::ServerSocketClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString S; S="IP_ADDR=" Socket->RemoteAddress "\r\n"; //Client的IP S ="IP_PORT=" IntToStr(Socket->RemotePort) "\r\n"; //Client的Port Str_->Add( S Socket->ReceiveText()); // 儲存至String中 } Thread的.Cpp檔 //--------------------------------------------------------------------------- #includeAndy Chang 發表人 - andychang1690 於 2005/06/29 22:07:54
------
Andy Chang |
kndd
一般會員 發表:4 回覆:8 積分:2 註冊:2004-05-05 發送簡訊給我 |
引言:謝謝您的解答,我趕去緊查Thread的用法 程式真是越寫越好玩~每當寫出個功能就很有成就^^kndd:你可以建立Thread的方式(我建議以Thread方式) 例建立TStrings *Str_; 為全域變數,於.h檔中 private: // User declarations MsgThread *msgthread; //多執行緒程式 //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; extern TStrings* Str_; //--------------------------------------------------------------------------- #endif .Cpp檔 TForm1 *Form1; TStrings* Str_; void __fastcall TForm1::FormCreate(TObject *Sender) { ServerSocket->Active = true ; Str_=new TStringList(); msgthread = new MsgThread(); } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { if (msgthread) msgthread->Terminate(); ServerSocket->Active = false ; delete Str_; } void __fastcall TForm1::ServerSocketClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString S; S="IP_ADDR=" Socket->RemoteAddress "\r\n"; //Client的IP S ="IP_PORT=" IntToStr(Socket->RemotePort) "\r\n"; //Client的Port Str_->Add( S Socket->ReceiveText()); // 儲存至String中 } Thread的.Cpp檔 //--------------------------------------------------------------------------- #includeAndy Chang |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |