社区
网络通信/分布式开发
帖子详情
如何在同一端口上传输不同的数据类型?
阿武
2010-12-15 10:58:33
大家好,我用indy控件传输数据,因为有时候需要发送不同的数据类型,如double数组,bool数组,或自定义的结构体。
长度内容不一样,我用了不同的端口来分辨不同的数据类型。感觉这样做好像不太正规,应该可以直接从文件头中识别
不同的数据。但具体怎么做搞不懂,网上查不到相关的信息。有没有朋友能指点下如何实现的?谢谢。
...全文
203
9
打赏
收藏
如何在同一端口上传输不同的数据类型?
大家好,我用indy控件传输数据,因为有时候需要发送不同的数据类型,如double数组,bool数组,或自定义的结构体。 长度内容不一样,我用了不同的端口来分辨不同的数据类型。感觉这样做好像不太正规,应该可以直接从文件头中识别 不同的数据。但具体怎么做搞不懂,网上查不到相关的信息。有没有朋友能指点下如何实现的?谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZyxIp
2010-12-18
打赏
举报
回复
你是没有办法通过接收到的数据长度来判断的,因为有可能一次发送而多次收到。
ZyxIp
2010-12-16
打赏
举报
回复
数据包的头
THead=packed Record
Head1:Byte;
Head2:Byte;
ID:Byte;
Len:Word;
end;
个人信息
TMyInfo=packed Record
Name:Array [0..9]of Char;
Time:TDateTime;
Age:Word;
end;
比如现在我要发送个人信息从A到B
procedure Send(Sockek:TCustomWinSocket);
var
Head:THead
MyInfo:TMyInfo;
CRC:Byte;//校验
Buf:Array of Byte;
begin
Head.Head1:=$AA;
Head.Head2:=$FF; 从A到B的数据包都是以 $AA $FF 开头
Head.ID:=10;//发送个人信息的命令为10,每个发送命令用不同的编号
Head.Len:=SizeOf(Head)+SizeOf(MyInfo)+1; //整个数据包的长度,加1是最后一位是校验码
MyInfo.Name:='ABC';//用户名
MyInfo.Time:=Now; //生日
MyInfo.Age:=10;
SetLength(Buf,Head.Len);
CopyMemory(Buf,@Head,SizeOf(Head));
CopyMemory(Buf,Pointer(Integer(@Head)+SizeOf(Head)),SizeOf(MyInfo));
Buf[Head.Len-1]:=$99;//这里应该是校验
Sockek.SendBuf(Buf,Head.Len);
SetLenght(Buf,0);
end;
收到后根据 Head.Head1,Head.Head2知道这是一个数据的开始,然后根据Head.Len找到数据的结尾,然后根据
校验来知道数据传输是否正确。
Head.ID知道传递是个人信息。 然后在取出数据。
zhaodog
2010-12-16
打赏
举报
回复
在传输的数据中用一个位置,表示你传输的数据时什么类型,就像Variant 类型一样
keeley20
2010-12-16
打赏
举报
回复
将内容写入流 发送
接收流,写到自定义的结构体。
bdmh
2010-12-16
打赏
举报
回复
一个端口足够,你发送的其实都是流数据,跟你什么类型无关,把包组的规矩点,包体含有识别信息,接收到后,先解码出头信息,然后根据不同的头信息去处理包体
阿武
2010-12-16
打赏
举报
回复
数据量比较小,所以直接用的udp协议。而且是一个交换机内传输,就不用加校验了。
想来应该没问题。:)
阿武
2010-12-16
打赏
举报
回复
想了个简单的方法,跟楼上的想法一样。因为数据类型只有四种,2种结构体,1个布尔数组,一个双精度数组。
对应的长度分别是1,7,10,2047,所以我直接在接收时根据接收的数据流长度判断用哪种类型就可以了。
谢谢大家。
haitao
2010-12-15
打赏
举报
回复
编码为base64或ini或xml,再传输
如何实现
不同
交换机上的终端在
同一
VLAN上互联?
如何实现
不同
交换机上的终端在
同一
VLAN上互联?如下图:PC0,PC1和PC4在
同一
VLAN ,PC2和PC3在
同一
VLAN,怎么实现
同一
VLAN 上的终端互通呢? 我们知道在交换机不做任何配置的时候,所有
端口
都在
同一
个默认vlan下,所以...
同一
进程中
同一
端口
如何区分
不同
的Socket
通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和
传输
层通过套接字接口,区分来自
不同
应用程序进程或网络连接的通信,实现数据
传输
的并发服务。 accept()产生的Socket
端口
号是多少? ...
同一
端口
如何区分
不同
的Socket
主要有3个参数:通信的目的IP地址、使用的
传输
层协议(TCP 或 UDP)和使用的
端口
号。 Socket的原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和
传输
层通过套接字接口,...
什么是443
端口
?HTTPS是什么
端口
?如何工作
服务器连接到
端口
后,它将发回网站信息,您的系统将在
同一
端口
上接收该信息。
端口
可以看到网络连接到正确的位置。此外,它们还可以确保流量不会混乱。而且,出于安全原因需要
端口
。 现在,有
不同
类型的网络
端口
...
web服务器--基于
同一
IP的
不同
端口
访问
不同
网站
基于
同一
IP的
不同
端口
访问
不同
网站
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章