Socket通信 C#写服务商 Delphi客户端
来源:互联网 发布:搜狗拼音输入法软件 编辑:程序博客网 时间:2024/05/22 03:52
摘要: 最近在做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 := '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。
- Socket通信 C#写服务商 Delphi客户端
- C# TCP Socket通信客户端
- C# Socket通信 客户端 服务器端代码
- C# Socket通信客户端类、服务器类
- android 客户端 C#服务器端 socket 通信
- PHP客户端与C#服务器端 Socket通信
- C# socket通信 模拟服务器端、客户端
- delphi(客户端) socket 与 PHP_socket(服务器) 通信的例子
- Delphi服务端和PHP客户端通过Socket通信
- C# Socket通信的服务器与客户端的通信
- socket通信例子_服务端写客户端读多线程写法
- Java做Socket服务端与Delphi做Socket客户端的通信
- C# Socket简单例子(服务器与客户端通信)
- C# Socket简单例子(服务器与客户端通信)
- C# Socket简单例子(服务器与客户端通信)
- C# socket 服务端与客户端通信演示代码
- C# SOCKET编写的简单聊天通信程序(客户端+服务端)
- C# Socket TCP简单例子(服务器与客户端通信)
- eclipse 启动时异常处理
- Linux下的tar压缩解压缩命令详解
- WMware虚拟机中无法连接到网络可能的原因
- 数据挖掘中所需的概率论与数理统计知识、上
- 将登录等信息保存到session中和退出session
- Socket通信 C#写服务商 Delphi客户端
- Ant之MacroDef——“宏”
- 移动端HTML5<video>视频播放优化实践
- Mac OS X 下的JDK路径
- OpenGL3.0教程 第一课:新建一个窗口
- 程序平台系统开发修复
- java的23种模式
- Save as PDF/X-3/4/5 error with pdflib
- jQuery源码分析之proxy函数