想使用網路埠送hex碼給其他的網路產品,程式這樣寫對嗎? |
答題得分者是:ikk
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
各位前輩好,我的問題是:我想透過網路埠傳送給一般自動控制等元件,他們接收的通訊碼內容跟rs-232一樣是收hex碼的,然後是一個byte接一個byte這樣的通訊方式.
因為我沒寫過網路通訊,所以就在站上先搜索了幾次然後寫了下面的通訊,然後我想請問要透過網路埠送碼的程式是這樣寫嗎?和網路除IP以外為什麼還會有PORT這個值,那是否有資料可以知道那些PORT的值是不能使用. 再麻煩各位前輩說明一下.謝謝!! [code cpp] //這是傳送鍵 void __fastcall TForm1::Button2Click(TObject *Sender) { unsigned char buf[ 5 ]; if( (Edit1->Text!="") && (Edit2->Text!="") ) { ClientSocket1->Host=Edit1->Text; ClientSocket1->Port=Edit2->Text.ToInt(); buf[ 0 ] = 0x05; // stx buf[ 1 ] = 0x00; // func id 1 buf[ 2 ] = 0x00; // func id 2 buf[ 3 ] = 0xd8; // xxxx ... buf[ 4 ] = 0x93; // xxxx ... etc... ClientSocket1->Socket->SendBuf( buf, 5 ); } else { MessageBox (NULL, "請先輸入IP位置!!" , "警告",MB_OK); } } //這是接收鍵 void __fastcall TForm1::Button1Click(TObject *Sender) { // (0) 宣告接收記憶體 unsigned char receiveBuf[ 50 ]; AnsiString display_string; // (1) 先查有多少字收到 if( (Edit1->Text!="") && (Edit2->Text!="") ) { ClientSocket1->Host=Edit1->Text; ClientSocket1->Port=Edit2->Text.ToInt(); // (1) 先查有多少字收到 int receiveLen = ClientSocket1->Socket->ReceiveLength(); // (2) 接收資料 ClientSocket1->Socket->ReceiveBuf( receiveBuf, receiveLen ); // (3) 把資料轉成看的懂的格式 for( int i = 0; i < receiveLen; i ) { display_string = "0x" IntToHex( receiveBuf[ i ], 2 ) " "; } // (4) 顯示在 Memo 上 Memo1->Lines->Add( display_string ); } else { MessageBox (NULL, "請先輸入IP位置!!" , "警告",MB_OK); } } [/code]
------
vincent |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
[code cpp] //這是SERVER的傳送 unsigned char buf[ 5 ]; if( (Edit1->Text!="") && (Edit2->Text!="") ) { try { //ServerSocket1->Host=Edit1->Text; ServerSocket1->Port=Edit2->Text.ToInt(); ServerSocket1->Open(); buf[ 0 ] = 0x05; // stx buf[ 1 ] = 0x00; // func id 1 buf[ 2 ] = 0x00; // func id 2 buf[ 3 ] = 0xd8; // xxxx ... buf[ 4 ] = 0x93; // xxxx ... etc... ServerSocket1->Socket->SendBuf( buf, 5 ); ServerSocket1->Close(); } catch (...) { MessageBox (NULL, "無此主機!!" , "通知" ,MB_OK); ServerSocket1->Close(); } } else { MessageBox (NULL, "請先輸入IP位置!!" , "警告",MB_OK); } //這是SERVER的接收 // (0) 宣告接收記憶體 (用靜態的速度會快些 ) unsigned char receiveBuf[ 50 ]; AnsiString display_string; int receiveLen; // (1) 先查有多少字收到 if( (Edit1->Text!="") && (Edit2->Text!="") ) { try { //ServerSocket1->Host=Edit1->Text; ServerSocket1->Port=Edit2->Text.ToInt(); ServerSocket1->Open(); // (1) 先查有多少字收到 receiveLen = ServerSocket1->Socket->ReceiveLength(); // (2) 接收資料 ServerSocket1->Socket->ReceiveBuf( receiveBuf, receiveLen ); // (3) 把資料轉成看的懂的格式 for( int i = 0; i < receiveLen; i ) { display_string = "0x" IntToHex( receiveBuf[ i ], 2 ) " "; } // (4) 顯示在 Memo 上 Memo1->Lines->Add( display_string ); ServerSocket1->Close(); } catch (...) { MessageBox (NULL, "無此主機!!" , "通知" ,MB_OK); ServerSocket1->Close(); } } else { MessageBox (NULL, "請先輸入IP位置!!" , "警告",MB_OK); } [/code] 我是分2個程式,令外一個server端是把上面的client端的socket改成server但是我找不到跟上面 ClientSocket1->Host=Edit1->Text;所以不知道怎麼給server IP 因為完全沒寫過網路的通訊,所以試半天試不出來一直出現問題. 不好意思,可以說明一下SERVER怎麼設定IP的地方嗎? 還有PORT的部份因為是自己測試可以隨便設一個,只要2邊一樣就可以嗎? ===================引 用 ikk 文 章=================== 如果你是在本機試ip就用127.0.0.1呀.. 你client端與server是分成2個程式吧? 一送一收?
------
vincent
編輯記錄
vk8051 重新編輯於 2008-08-24 13:12:56, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
vk8051
一般會員 發表:22 回覆:33 積分:21 註冊:2007-08-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |