摘要: 最近在做wince開發,搞乙個超市賣場採用手持機盤點的現場作業模組。通訊部分的實現有兩種,其一是通過usb線把資料拷到pda 上,掃瞄條碼後,查詢本地的商品資料庫(用sqlite做本地庫),盤點完成後再通過usb把盤點結果匯入伺服器(還是通過讀取sqlite庫的方式),好處是賣場不需要布局wifi,減少投資。其二是通過wifi,建立無線連線,打描條碼後,直接讀取伺服器上的商品資料,盤點數量也直接寫入伺服器,這樣的好處是盤點結果可以實時傳到伺服器,並且始終能夠取得最新的商品資料,減少了盤點前導入商品資料的準備工作。
下面主要說明下通訊部分的編碼。
1、dpa客戶端wince(主要思路)。
//定義傳送資料快取
byte data = new byte[1024];
//定義字串,用於控制台輸出或輸入
string input, stringdata;
input = txt_barcode.text + "@##";
//將傳送的字串轉換成整型資料並儲存在陣列中
data = cmdresolver.getdatapdgoods(input); //按定義的資料格式生成內容,傳送內容多了換行符「\n」
_socket.send(data);
//傳送完成後等待接收返回的結果
data = new byte[1024];
int bytesrec = _socket.receive(data );
if (bytesrec == 0)
stringdata = encoding.utf8.getstring(data , 0, bytesrec);
2、服務端c#
//接收資料後的處理
datagram = datagram.replace("\n", "");//將回車符去掉
3、delphi客戶端(d7+indy10.5.7)
vardata: tidbytes;
str: string;
bytes: integer;
begin
if idtcpclnt1.connected = false then
idtcpclnt1.connect('192.163.1.132', 5632);
str := '16923589447223@12@##';
data := tobytes(str, length(str), 1);//, tidtextencoding.utf8, tidtextencoding.utf8);//編碼轉換
data[0] := 1; //第一位是命令字
idtcpclnt1.socket.write(data);
bytes := 10; // utf8toansi
//str := ( idtcpclnt1.socket.readstring(bytes) );
str := idtcpclnt1.socket.readln( tidtextencoding.utf8, tidtextencoding.utf8 ); //結束標記必須是換行符
str := utf8toansi(copy(str, 2, maxintatom));
showmessage(str);
總結:1、由於需要與delphi的通訊相匹配,所以c#通訊時都增加了換行結束符。
2、增加了換行結束符的***就是c#接收到的內容中多出來乙個換行符,所以需要去掉,才出現了在服務端需要替換換行符的情況 datagram = datagram.replace("\n", "")。
結束語:
您也可以用 idtcpclnt1.socket.readstring()或者 idtcpclnt1.socket.readbytes()來實現接收,但需要提前知道要接收的位元組數。那麼在服務端要傳送資料之前,需要先把
資料長度發給客戶端,這對c#客戶端是沒有任何用處的,並且傳字元長度也需要特殊處理。所以我採用了增加結束符的方式來實現異構通訊,簡單優雅0^0。
和客CRM客戶關係管理服務商
關於和客 願景讓企業沒有難管的業務員,消除企業痛點。目標讓客戶100 滿意是我們最高的目標。文化 橙色的戰鬥 綠色的家園 藍色的學習 其中,家園是中心,戰鬥和學習的最終目的都是為了擁有美好的家園。正代表著軍隊 家庭 學校,這是和客科技所倡導的價值觀。和客簡介 廣東和客科技股份 成立於2015年,是一...
服務端 客戶端Socket通訊
服務端 using system using system.collections.generic using system.net using system.net.sockets using system.text using system.text.regularexpressions usi...
客戶端與服務端的Socket通訊
客戶端 public class client catch exception e public void start else catch exception e public static void main string args catch exception e 該執行緒專門用來迴圈讀取服...