通过C# Scoket收发数据,结构体转换成byte数据流问题(结构体中包含int数组时无法解决)
我在C#Scoket中通过TCP协议,收发一个结构体,如果结构体中包含的元素是string或是int型的数据都可以收发成功了。但是换成int[]数组的,接收到的始终是乱码...
我在C# Scoket中通过TCP协议,收发一个结构体,如果结构体中包含的元素是string或是int型的数据都可以收发成功了。但是换成int[]数组的,接收到的始终是乱码。
先介绍下背景情况:
我这边是跟服务器交互,服务器是ON2000系统,通过TCP报文通信。
报文格式已经规定,大致如下:
头部 int
报文长度 int
报文类型 short
个数(N) short
id号(N个)int
在这里我想用一个int型的数组来存放这里的id号码。
但是现在无法解决将这个包含int数组的结构体转换成byte后的数据接收。如果将这个数组换成一个int型的数据,则可以正常收发了。在客户端调试时,发现,当结构体转换为byte流时,只能转换结构体中的那个int数组的第一个元素,之后的几个全没了。
然后我也在CSDN上发了贴,得到了不少回应,其中有位朋友建议在定义结构体时在数组字段加上加长度属性。如下:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
int[] IDS { get; set; }
我试了,已经测试通过,可用。但是由于我是跟服务器交互,服务器端的接受方不可编辑,我必须按照接收端的协议操作。当我在数组字段前加上长度属性后,必须将int数组定义的足够大,这样得到的byte流会有很多冗余的空间,这样的数据恐怕服务端无法接受,所以希望可以有更好的方法来解决int数组转byte的问题。
有哪位高手可以指点一下的?!谢谢了~~ 展开
先介绍下背景情况:
我这边是跟服务器交互,服务器是ON2000系统,通过TCP报文通信。
报文格式已经规定,大致如下:
头部 int
报文长度 int
报文类型 short
个数(N) short
id号(N个)int
在这里我想用一个int型的数组来存放这里的id号码。
但是现在无法解决将这个包含int数组的结构体转换成byte后的数据接收。如果将这个数组换成一个int型的数据,则可以正常收发了。在客户端调试时,发现,当结构体转换为byte流时,只能转换结构体中的那个int数组的第一个元素,之后的几个全没了。
然后我也在CSDN上发了贴,得到了不少回应,其中有位朋友建议在定义结构体时在数组字段加上加长度属性。如下:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
int[] IDS { get; set; }
我试了,已经测试通过,可用。但是由于我是跟服务器交互,服务器端的接受方不可编辑,我必须按照接收端的协议操作。当我在数组字段前加上长度属性后,必须将int数组定义的足够大,这样得到的byte流会有很多冗余的空间,这样的数据恐怕服务端无法接受,所以希望可以有更好的方法来解决int数组转byte的问题。
有哪位高手可以指点一下的?!谢谢了~~ 展开
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询