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

Sendbuf 的問題

答題得分者是:andychang1690
a126154362
一般會員


發表:21
回覆:13
積分:6
註冊:2004-05-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-15 21:10:37 IP:61.70.xxx.xxx 未訂閱
各位大大好 小弟想用sendbuf的指令"一次傳多的訊息" 不知道如何區資料 希望各位大大可以教教我.........3q
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-16 00:12:12 IP:221.169.xxx.xxx 未訂閱
引言: 各位大大好 小弟想用sendbuf的指令"一次傳多的訊息" 不知道如何區資料 希望各位大大可以教教我.........3q
a126154362:不太懂你的意思,我使用SendBuf();一向是做斷行處理! 範例: 發送端: msg="ret="對不起,不知所云。\r\nmsg=error\r\n"; // \r\n為斷行 SendBuf(msg.c_str(), msg.Length()); 接受端: TStrings* RecMsg; RecMsg = new TStringList(); RecMsg->Text=Socket->ReceiveText(); RecMsg->Values["ret"]; // ="對不起,不知所云。" RecMsg->Values["msg"]; // ="error" 你可以發現字串裡的ret=和msg=就是接收後的Value[]; 請參考! Andy Chang
------
Andy Chang
a126154362
一般會員


發表:21
回覆:13
積分:6
註冊:2004-05-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-16 22:01:41 IP:61.70.xxx.xxx 未訂閱
那有什麼指令可以一次就傳多種不同的訊息    例如: 我想傳帳號,密碼,狀態三種訊息    Socket->sendtext(XXX); XXX<-裡面含了上面三種的訊息 有什麼指令可以做到這樣的功能ㄚ
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-16 23:27:34 IP:221.169.xxx.xxx 未訂閱
a126154362:如果你了解TStrings的Text及Values。我前篇已經告訴
你方法了!我現在引用你要的帳號,密碼,狀態(ID,PWS,TYPE)來說明!
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
 \r\n
不論你用SendBuf(msg.c_str(), msg.Length());的指令
還是Socket->sendtext(msg);
重點在接收端的處理!
接受端:
TStrings* RecMsg;
RecMsg = new TStringList();
RecMsg->Text=Socket->ReceiveText();
RecMsg->Values["ID"]; // AndyChang
RecMsg->Values["PWS"]; // andy
RecMsg->Values["TYPE"]; // OK
只要引用Values[]就可得到資料!若是你沒定義TYPE那結果是NULL!
請參考!
Andy Chang
------
Andy Chang
a126154362
一般會員


發表:21
回覆:13
積分:6
註冊:2004-05-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-22 11:32:36 IP:61.70.xxx.xxx 未訂閱
引言:
a126154362:如果你了解TStrings的Text及Values。我前篇已經告訴
你方法了!我現在引用你要的帳號,密碼,狀態(ID,PWS,TYPE)來說明!
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
 \r\n
不論你用SendBuf(msg.c_str(), msg.Length());的指令
還是Socket->sendtext(msg);
重點在接收端的處理!
接受端:
TStrings* RecMsg;
RecMsg = new TStringList();
RecMsg->Text=Socket->ReceiveText();
RecMsg->Values["ID"]; // AndyChang
RecMsg->Values["PWS"]; // andy
RecMsg->Values["TYPE"]; // OK
只要引用Values[]就可得到資料!若是你沒定義TYPE那結果是NULL!
請參考!
Andy Chang
請問如果要傳變數(不是預設值)的話要怎麼用 .....上面紅色部分要為變數
devademon
一般會員


發表:4
回覆:12
積分:3
註冊:2004-09-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-22 13:43:50 IP:210.66.xxx.xxx 未訂閱
引言:
引言:
a126154362:如果你了解TStrings的Text及Values。我前篇已經告訴
你方法了!我現在引用你要的帳號,密碼,狀態(ID,PWS,TYPE)來說明!
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
 \r\n
Andy Chang
請問如果要傳變數(不是預設值)的話要怎麼用 .....上面紅色部分要為變數
不知道是不是我想得太簡單了,若不用andychang1690大大的方法(TStringList), 那就多加幾個變數..ID,PWS,TYPE,來接收你要的參數, 要傳時再把這些+起來...
msg = "ID="+ID(變數內容:AndyChang)+"\r\nPWS="+PWS(andy)+"\r\nTYPE="+TYPE(OK)+"\r\n";
把msg送出去,接收端收到後再做字串處理... 你要的是這個嗎? 我只會這個...<><>
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-22 17:59:04 IP:221.169.xxx.xxx 未訂閱
引言:
引言:
引言:
a126154362:如果你了解TStrings的Text及Values。我前篇已經告訴
你方法了!我現在引用你要的帳號,密碼,狀態(ID,PWS,TYPE)來說明!
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
 \r\n
Andy Chang
請問如果要傳變數(不是預設值)的話要怎麼用 .....上面紅色部分要為變數
不知道是不是我想得太簡單了,若不用andychang1690大大的方法(TStringList), 那就多加幾個變數..ID,PWS,TYPE,來接收你要的參數, 要傳時再把這些+起來...
msg = "ID="+ID(變數內容:AndyChang)+"\r\nPWS="+PWS(andy)+"\r\nTYPE="+TYPE(OK)+"\r\n";
把msg送出去,接收端收到後再做字串處理... 你要的是這個嗎? 我只會這個...<><> < face="Verdana, Arial, Helvetica">
TStrings的Text及Values是處理接收用的
AnsiString msg;
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
SendBuf(msg.c_str(), msg.Length());
管上面紅字是怎麼東東!重點是你接收的處理!
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
  TStrings* RecMsg;
  AnsiString S1,S2,S3;
  RecMsg = new TStringList();
  RecMsg->Text=Socket->ReceiveText();
  S1=RecMsg->Values["ID"];   // 得到AndyChang
  S2=RecMsg->Values["PWS"];  // 得到andy
  S3=RecMsg->Values["TYPE"]; // 得到OK
  if (S3=="OK")
    // do about S1 or S2
  else
    // do something
  .....
  delete RecMsg;
}
請參考!
Andy Chang
------
Andy Chang
devademon
一般會員


發表:4
回覆:12
積分:3
註冊:2004-09-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-23 10:44:46 IP:210.66.xxx.xxx 未訂閱
引言:
TStrings的Text及Values是處理接收用的
AnsiString msg;
msg="ID=AndyChang\r\nPWS=andy\r\nTYPE=OK\r\n";
SendBuf(msg.c_str(), msg.Length());
管上面紅字是怎麼東東!重點是你接收的處理!
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
  TStrings* RecMsg;
  AnsiString S1,S2,S3;
  RecMsg = new TStringList();
  RecMsg->Text=Socket->ReceiveText();
  S1=RecMsg->Values["ID"];   // 得到AndyChang
  S2=RecMsg->Values["PWS"];  // 得到andy
  S3=RecMsg->Values["TYPE"]; // 得到OK
  if (S3=="OK")
    // do about S1 or S2
  else
    // do something
  .....
  delete RecMsg;
}
請參考!
Andy Chang
贊成用 andychang1690 大大的方法, 我想摸過一陣子BCB的人都會較習慣用這個方式來傳資料, 我以前的方法是把要傳的東西結成一個字串, 各個參數間再用一個特殊或較少使用的符號隔開(如'|',';',....), 自己定義第一個是ID,第二個是PWD,第三個是TYPE, 程式的寫法是 msg=ID+";"+PWD+";"+TYPE+";"; 那msg的內容就是"AndyChang;Andy;OK;", 再將msg傳給接收端, 接收瑞以字串接收,再針對';'做字串拆解(在C是用strtok()), 拆得第一個是AndyChang,第二個是Andy,第三個是OK... 但這個方法不但麻煩而且沒有效率,除了簡單易懂外我想沒其它好處, 這也是為什麼建議用 andychang1690 大大的方法的原因
系統時間:2024-05-08 17:55:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!