1. 程式人生 > >Socket通訊 C#寫服務商 Delphi客戶端

Socket通訊 C#寫服務商 Delphi客戶端

      摘要: 最近在做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)
                {
                    //warning 0 bytes received
                }
                stringData = Encoding.UTF8.GetString(data , 0, bytesRec);

        2、服務端C#

               //接收資料後的處理

              Datagram = Datagram.Replace("\n", "");//將回車符去掉

         3、Delphi客戶端(D7+Indy10.5.7)

        var
           data: TIdBytes;
           str: string;
           bytes: integer;
         begin
           if idtcpclnt1.Connected = False then
             idtcpclnt1.Connect('192.163.1.132', 5632);
           str := '[email protected]@##';
           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。



相關推薦

Socket通訊 C#服務商 Delphi客戶

      摘要: 最近在做Wince開發,搞一個超市賣場採用手持機盤點的現場作業模組。通訊部分的實現有兩種,其一是通過USB線把資料拷到PDA 上,掃描條碼後,查詢本地的商品資料庫(用SQLite做本地庫),盤點完成後再通過USB把盤點結果匯入伺服器(還是通過讀取SQLi

C#Socket通訊基礎(非同步Socket通訊TCP)伺服器與客戶

一、效果圖 二、伺服器端程式碼(原始碼下載地址:https://download.csdn.net/download/xiaochenxihua/10748789) using System; using System.Collections.Generic; using System

C#實現Socket通訊(同時監聽多客戶)

//建立socket物件 //第一個引數:設定網路定址的協議、第二引數設定資料傳輸的方式、第三個引數設定通訊協議 Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketT

SSL握手通訊詳解及linux下c/c++ SSL Socket(另附SSL雙向認證客戶程式碼)

SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通訊提供安全及資料完整性的一種安全協議。TLS與SSL在傳輸層對網路連線進行加密。   安全證書既包含了用於加密資料的金鑰

Socket通訊——C++伺服器和Java客戶

//更新 這件事可以用現有的序列化框架來做 比如 protobuf 一句話來說就是,C++和Java 通過socket進行通訊、資料傳輸,通過傳送“位元組流”即可。 位元組對於C++和java來說是通用的,但是傳輸的過程有許多問題需要注意,我為了弄清楚這個過程,查了一些資料

java與c語言之間的socket通訊c客戶java伺服器

寫在前面的宣告:程式例子均執行在ubuntu(是一個以桌面應用為主的Linux作業系統)上。當然你也可以把java執行在其它系統上,這裡只是為了方便。 上一篇文章已經說明了關於socket的一些知識,but這是遠遠不夠的,我相信只要你感興趣,學習它並不是什麼難事。 好吧,我

C# Socket簡單例子(伺服器與客戶通訊

這個例子只是簡單實現瞭如何使用 Socket 類實現面向連線的通訊。注意:此例子的目的只是為了說明用套接字寫程式的大概思路,而不是實際專案中的使用程式。在這個例子中,實際上還有很多問題沒有解決,如訊息邊界問題、埠號是否被佔用、訊息命令的解析問題等。。下面是兩個程式的程式碼,(

Windows socket c++ TCP UDP 簡單客戶 vs2013

進行 msg print type pro i/o while write n) socket 主要是網絡中進程之間的通信,起源於Unix,而“一切皆可文件”的思想一樣可以用在socket上,即 打開 -> 讀寫 -> 關閉。 int socket(int do

java socket伺服器與安卓多客戶通訊

首先我們建立服務端, public class Main { public static void main(String[] args){ //啟動socket服務 try{ final ServerSo

C#實現伺服器和客戶之間通訊

TCP  套接字程式設計 伺服器端實現步驟: 1、使用Socket類建立套接字。 2、利用Bind方法將建立的套接字繫結到指定的地址結構。 3、利用Listen方法設定套接字為監聽模式,使得伺服器進入被動開啟狀態。 4、接受客戶端的連線請求。 5、接收、應答客戶端的資料請求

socket網路程式設計中伺服器與客戶通訊失敗的問題

伺服器程式碼如下 public class server { public static void main(String[] args) throws IOException { ServerSocket server=new S

C++基礎--完善Socket C/S ,實現客戶,伺服器斷開重連

相關文章 1 // WindowsSocketServer.cpp : 定義控制檯應用程式的入口點。 2 // 3 4 #include "stdafx.h" 5 #include <iostream&

C++ Socket C/S ,實現客戶,伺服器斷開重連

// WindowsSocketServer.cpp : 定義控制檯應用程式的入口點。 #include "stdafx.h" #include <iostream> #include <string> #include <Windows.h> #include <

delphi客戶連接IBM MQ

delphi ibm mq delphi客戶端連接ibm mq 項目需要:his-lis之前交互以表/視圖BS方式完成交互,現需要更換成用IBM MQ消息平臺的方式完成交互。修改後的交互:部署測試環境: Windows2003+Windows xp+IBM MQ 7.0.5具體實現步驟:部署

C# 不安裝Oracle客戶情況下,如何連接到Oracle數據庫

是不是 如何 () 需要 -s 找到 密碼 dex add 簡介:   在我們開發應用場景經常碰到需要連接Oracle數據庫,這也是相當常見的一種情況。一般.Net環境連接Oracle數據庫,可以通過TNS/SQL.NET 配置文件,而 TNS 必須要 Oracle 客戶端

學習記錄---C# Web程序獲取客戶電腦信息

C# oid tostring -- mac listen console ads ima 問題描述:由於最近項目需要使用Mac地址與註冊碼進行加密處理,但是又因為Web程序的局限性不能獲取客戶端電腦系統信息,當然IE瀏覽器有一個activex控件他是可以通過Js在前端代碼

socket程式設計回射伺服器和客戶

//回射伺服器 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet

python : 通過socket的Tcp/ip協議實現客戶與服務的資料互動

#服務端 繫結socket 繫結目的ip和埠 建立監聽 建立連線 資料互動 import socket ''' #建立socket :通過server接收 #繫結目的ip和埠號 #設定監聽 #建立連線Socket,Address接收資訊 #資料互

利用socket技術實現用java實現客戶向服務傳送檔案,伺服器接收檔案並給出一個響應。

通訊是網路程式設計中重要的組成部分,而socket程式設計是網路程式設計的基礎。利用socket可以實現客戶端和伺服器端的通訊。下面我先把客戶端和伺服器端的程式碼粘上去再進行詳細的分析。 package test1; import java.io.File; import java.io

REDIS (15)手Java Redis客戶(1)RESP協議分析(未完)

一直對Jedis有點興趣, 現在靜下心來抽空看看redis客戶端和消費端是怎麼連線的 1. 對Jedis的get命令抓包 傳送 接收 可見是明文協議,0d 0a 是 \r\n我們找下文件 redis 序列化協議 2. 模仿協議內容傳送並接收內容 2.1 傳統BIO