請問網路作Byte傳送!! |
答題得分者是:brook
|
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請問當在作網路傳送時以Byte傳,從Client端傳送到Server端,反之! 舉例:比如 Client端傳送Byte 如:255 資料給 Server 端時,在Server端要ShowMessage 11111111 的資料!但是Server端的Edit要顯示出255,也就是先是到Edit端的資料是不變的。LI 你好: 請參考以下的範例程式碼 < class="code"> // Client __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ClientSocket1->Address="192.168.1.2"; ClientSocket1->Port=4000; ClientSocket1->Open(); } __fastcall TForm1::~TForm1() { ClientSocket1->Close(); } void __fastcall TForm1::Button1Click(TObject *Sender) { BYTE bData=255; ClientSocket1->Socket->SendBuf(&bData, 1); } // Server #include "IdGlobal.hpp" __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ServerSocket1->Port=4000; ServerSocket1->Open(); } __fastcall TForm1::~TForm1() { ServerSocket1->Close(); } void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { BYTE bData; Socket->ReceiveBuf(&bData, 1); ShowMessage(IntToBin(bData)); Edit1->Text=IntToStr(bData); } 備註: 另外,本站還有很多現成的範例程式碼,建議你善用搜尋的功能 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
|
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
[quote]
謝謝大哥的回應!!
小妹還有一小問題同上:假如我要把轉換完的16進制 ,用二個或更多個Edit作加密傳送,可以這樣做嗎?
/quote]
void __fastcall TForm1::Button1Click(TObject *Sender) { /* Edit1->Text = 255; Edit2->Text = 1; Edit3->Text = 2; Edit4->Text = 3; Edit5->Text = 4; */ BYTE bData[5]; bData[0]= (BYTE) atoi(Edit1->Text.c_str()); bData[1]= (BYTE) atoi(Edit2->Text.c_str()); bData[2]= (BYTE) atoi(Edit3->Text.c_str()); bData[3]= (BYTE) atoi(Edit4->Text.c_str()); bData[4]= (BYTE) atoi(Edit5->Text.c_str()); ClientSocket1->Socket->SendBuf(bData, 5); } |
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
<引言>
BYTE bData[5];
bData[0]= (BYTE) atoi(Edit1->Text.c_str());
bData[1]= (BYTE) atoi(Edit2->Text.c_str());
bData[2]= (BYTE) atoi(Edit3->Text.c_str());
bData[3]= (BYTE) atoi(Edit4->Text.c_str());
bData[4]= (BYTE) atoi(Edit5->Text.c_str());
ClientSocket1->Socket->SendBuf(bData, 5);
那請問一下:假如我要對bData作加密的方式作傳送,是否可以這樣加密,還是有相關的範例呢?
那我可以對下列二個陣列作加密或更多的陣列宣告作加密呢?
bData[0]= (BYTE) atoi(Edit1->Text.c_str());
bData[1]= (BYTE) atoi(Edit2->Text.c_str());
........ 感謝各位大哥哥的指教~~ 發表人 -
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
Sorry呀!可能是我描述的不清楚,以下的範例:我是想對
bData[0]= (BYTE) atoi(Edit4->Text.c_str());
bData[1]= (BYTE) atoi(Edit5->Text.c_str());
....或更多的bData[2].....
作加密但是...
Edit12->Text=bData[0] ',' bData[1];當加密完之後送給Server端解密之後
收到的值根原本不一樣~~
例如:我在Edit4,Edit5分別輸入255,166值。經過~~
Edit12->Text=bData[0] ',' bData[1];
char tmp_buf[65535];
EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL);
Edit12->Text=tmp_buf,NULL;
ClientSocket1->Socket->SendText(Edit12->Text);
傳送之後,在Server端收到的另一Edit應該是顯示255,166的值呀~(但不是」)~我不清楚是不是當在對陣列加密的方式,是不是這樣寫才對呀!!
請各位大哥解惑一下~謝謝~
BYTE bData;
try
{
BYTE bData[2]; bData[0]= (BYTE) atoi(Edit4->Text.c_str());
bData[1]= (BYTE) atoi(Edit5->Text.c_str());
Edit12->Text=bData[0] ',' bData[1];
char tmp_buf[65535];
EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL);
Edit12->Text=tmp_buf,NULL;
ClientSocket1->Socket->SendText(Edit12->Text);
}
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
引言: Sorry呀!可能是我描述的不清楚,以下的範例:我是想對 bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); ....或更多的bData[2]..... 作加密但是... Edit12->Text=bData[0] ',' bData[1];當加密完之後送給Server端解密之後 收到的值根原本不一樣~~ 例如:我在Edit4,Edit5分別輸入255,166值。經過~~ Edit12->Text=bData[0] ',' bData[1]; char tmp_buf[65535]; EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL); Edit12->Text=tmp_buf,NULL; ClientSocket1->Socket->SendText(Edit12->Text); 傳送之後,在Server端收到的另一Edit應該是顯示255,166的值呀~(但不是」)~我不清楚是不是當在對陣列加密的方式,是不是這樣寫才對呀!! 請各位大哥解惑一下~謝謝~ BYTE bData; try { BYTE bData[2]; bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); Edit12->Text=bData[0] ',' bData[1]; char tmp_buf[65535]; EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL); Edit12->Text=tmp_buf,NULL; ClientSocket1->Socket->SendText(Edit12->Text); }1.你要先測加密和解密,先不經網路,把問題簡單化,不知加密,解密後答案對不對? 2.假如加解密沒問題,再測不加密傳輸是不是可能資料正確無誤的傳輸給對方? 假如可正確的傳給對方,再來才測加密傳輸. 3. ClientSocket1->Socket->SendText(Edit12->Text); 這個指令用ClientSocket1->Socket->SendBuf(bData, 5);代替, Server端也要注意一下. 一般加密之後的資料絕大部份己不是字串形式,很可能會包含0x00在中間. |
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
引言:謝謝大哥的回應~~ 那我可以對以下陣列做二個以上傳嗎?~傳給Server端呀~~反之互傳~ bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); ....或更多的bData[2]..... 而Server 端可收到二個陣列或以上所傳來的資料嗎?引言: Sorry呀!可能是我描述的不清楚,以下的範例:我是想對 bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); ....或更多的bData[2]..... 作加密但是... Edit12->Text=bData[0] ',' bData[1];當加密完之後送給Server端解密之後 收到的值根原本不一樣~~ 例如:我在Edit4,Edit5分別輸入255,166值。經過~~ Edit12->Text=bData[0] ',' bData[1]; char tmp_buf[65535]; EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL); Edit12->Text=tmp_buf,NULL; ClientSocket1->Socket->SendText(Edit12->Text); 傳送之後,在Server端收到的另一Edit應該是顯示255,166的值呀~(但不是」)~我不清楚是不是當在對陣列加密的方式,是不是這樣寫才對呀!! 請各位大哥解惑一下~謝謝~ BYTE bData; try { BYTE bData[2]; bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); Edit12->Text=bData[0] ',' bData[1]; char tmp_buf[65535]; EnCryptStr(Edit12->Text.c_str(),tmp_buf,NULL); Edit12->Text=tmp_buf,NULL; ClientSocket1->Socket->SendText(Edit12->Text); }1.你要先測加密和解密,先不經網路,把問題簡單化,不知加密,解密後答案對不對? 2.假如加解密沒問題,再測不加密傳輸是不是可能資料正確無誤的傳輸給對方? 假如可正確的傳給對方,再來才測加密傳輸. 3. ClientSocket1->Socket->SendText(Edit12->Text); 這個指令用ClientSocket1->Socket->SendBuf(bData, 5);代替, Server端也要注意一下. 一般加密之後的資料絕大部份己不是字串形式,很可能會包含0x00在中間. |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
LI
一般會員 發表:15 回覆:18 積分:6 註冊:2003-06-13 發送簡訊給我 |
引言:Client端: void __fastcall TForm1::Button2Click(TObject *Sender) { BYTE bData; try { BYTE bData[4]; bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); bData[2]= (BYTE) atoi(Edit6->Text.c_str()); bData[3]= (BYTE) atoi(Edit7->Text.c_str()); ClientSocket1->Socket->SendBuf(&bData,4); } 接收端: void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { BYTE bData; Socket->ReceiveBuf(&bData, 4); Edit3->Text=(bData); } Server端: void __fastcall TForm1::Button2Click(TObject *Sender) { BYTE bData; try { BYTE bData[4]; bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); bData[2]= (BYTE) atoi(Edit6->Text.c_str()); bData[3]= (BYTE) atoi(Edit7->Text.c_str()); ServerSocket1->Socket->Connections[0]->SendBuf(bData, 4); } 接收端: void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { BYTE bData; Socket->ReceiveBuf(&bData, 4); Edit3->Text=IntToStr(bData); } 這樣是否正確~~~~引言: 謝謝大哥的回應~~ 那我可以對以下陣列做二個以上傳嗎?~傳給Server端呀~~反之互傳~ bData[0]= (BYTE) atoi(Edit4->Text.c_str()); bData[1]= (BYTE) atoi(Edit5->Text.c_str()); ....或更多的bData[2]..... 而Server 端可收到二個陣列或以上所傳來的資料嗎?可以,不知是否方便上傳你的程式或更清楚說明你的問題所在,你測的結果,如此才能對症下藥. |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
Client端:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
BYTE bData;
try
{
BYTE bData[4];
bData[0]= (BYTE) atoi(Edit4->Text.c_str());
bData[1]= (BYTE) atoi(Edit5->Text.c_str());
bData[2]= (BYTE) atoi(Edit6->Text.c_str());
bData[3]= (BYTE) atoi(Edit7->Text.c_str());
ClientSocket1->Socket->SendBuf(bData,4);
}
接收端:
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
BYTE bData[5];
Socket->ReceiveBuf(&bData, 4);
bData[4] = 0x00; //加上字串結束字元
Edit3->Text=(bData);
} Server端:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
try
{
BYTE bData[4];
bData[0]= (BYTE) atoi(Edit4->Text.c_str());
bData[1]= (BYTE) atoi(Edit5->Text.c_str());
bData[2]= (BYTE) atoi(Edit6->Text.c_str());
bData[3]= (BYTE) atoi(Edit7->Text.c_str());
ServerSocket1->Socket->Connections[0]->SendBuf(bData, 4);
} 接收端:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
BYTE bData[5]; Socket->ReceiveBuf(bData, 4);
bData[4] = 0x00;
Edit3->Text=IntToStr(bData);
} 紅色的部份有修正,因沒真正去run,可能還有bug,你先測一下,假如有問題再討論.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |