全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2435
推到 Plurk!
推到 Facebook!

想使用網路埠送hex碼給其他的網路產品,程式這樣寫對嗎?

答題得分者是:ikk
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-23 18:24:13 IP:219.86.xxx.xxx 訂閱
各位前輩好,我的問題是:我想透過網路埠傳送給一般自動控制等元件,他們接收的通訊碼內容跟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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-24 11:18:04 IP:163.28.xxx.xxx 訂閱
IP就像地址, 而port就是門了,
一個房子可以有許多門...
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-24 12:28:47 IP:218.160.xxx.xxx 訂閱
那在請問,我這樣程式對嗎?
因為我現在沒有網路設備當server端,所以我想用pc對pc來測試一下通訊的部份,但是都會失敗,還有server端我是把socket改成server的,但是找不到server的hot去給ip位址.
再麻煩,指點一下
===================引 用 ikk 文 章===================
IP就像地址, 而port就是門了,
一個房子可以有許多門...
------
vincent
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-24 12:38:51 IP:163.28.xxx.xxx 訂閱
如果你是在本機試ip就用127.0.0.1呀..
你client端與server是分成2個程式吧?
一送一收?
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-08-24 13:09:04 IP:218.160.xxx.xxx 訂閱

[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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-08-24 14:03:42 IP:163.28.xxx.xxx 訂閱
直接指定就可以呀,
ServerSocket1->Host = "127.0.0.1";

Port 的話client和server一定要一樣.
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-24 14:19:46 IP:218.160.xxx.xxx 訂閱

我了解你的意思,但是我打完這個以後ServerSocket1->有出現一堆選項可以選擇,但是就是沒有出現HOST這個,但是CLIENT的SOCKET有出現!!
這是什麼原因呀

===================引 用 ikk 文 章===================
直接指定就可以呀,
ServerSocket1->Host = "127.0.0.1";

Port 的話client和server一定要一樣.
------
vincent
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-08-24 14:28:03 IP:163.28.xxx.xxx 訂閱
如果你是剛學網路程式, 建議還是拿一個Client與server都寫好的來改..
先run過, 都ok再改,會比較快...
------
FPGA驗證, FPGA開發平台, http://smims.com
vk8051
一般會員


發表:22
回覆:33
積分:21
註冊:2007-08-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-08-24 14:47:31 IP:218.160.xxx.xxx 訂閱
那我了解了!!謝謝!!
===================引 用 ikk 文 章===================
如果你是剛學網路程式, 建議還是拿一個Client與server都寫好的來改..
先run過, 都ok再改,會比較快...
------
vincent
系統時間:2017-10-24 19:30:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!