社区
C#
帖子详情
困惑我几个月的难题,非星级高手不要进来浪费时间
gogogo
2003-05-23 03:37:49
怎样将从网络收到的有结构的包进行分解,举个例子从网上收到的包通过receivefrom接收到byte[]类型的buffer,假设这个buffer可看作三段,第一段是四字节的int,第二段是五字节的字符串,第三段是八字节的float,我定义了一个满足以上条件的结构体(或类对象),请问如何将这个buffer转化为这个结构(或对象),或者直接由这个结构或对象直接接收更好了。
...全文
44
16
打赏
收藏
困惑我几个月的难题,非星级高手不要进来浪费时间
怎样将从网络收到的有结构的包进行分解,举个例子从网上收到的包通过receivefrom接收到byte[]类型的buffer,假设这个buffer可看作三段,第一段是四字节的int,第二段是五字节的字符串,第三段是八字节的float,我定义了一个满足以上条件的结构体(或类对象),请问如何将这个buffer转化为这个结构(或对象),或者直接由这个结构或对象直接接收更好了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gogogo
2003-05-27
打赏
举报
回复
首先谢谢qqchen79(知秋一叶 [MS MVP]) ,并谢谢各位的参与,为了吸引大家的注意,使用了一些特别的词语,请各位原谅
nean
2003-05-24
打赏
举报
回复
笨,笨,笨。。。
emilio
2003-05-24
打赏
举报
回复
嗯,问题不难解决,但是我没有资格解答!
cherno
2003-05-24
打赏
举报
回复
我在VB里面实现和C的同样的通讯问题~~
但是我不是saucer(思归, MS .NET MVP),TheAres(班门斧),timmy3310(tim)等大虾~~而且也没有星~~所以无可奉告~~~
说话不要那么绝~~小子!
tpwang
2003-05-24
打赏
举报
回复
关注!
我也同样遇到这样的问题 :(
qqchen79
2003-05-24
打赏
举报
回复
1. 如果Client/Server都是.NET,那么使用Serialization也许更好些——虽然回多一些额外的负荷。
2. 否则,如果只有这三个变量成员,那么简单一点的办法就是用BitConverter类从byte[]中依次读出来:BitConverter.ToInt32, ToString和ToDouble。
3. 更通用的方法,如下所示:
http://expert.csdn.net/Expert/topic/1764/1764944.xml?temp=5.108058E-03
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct {
//... your type member here.
}
...
MyStruct str = ...;
int sz = Marshal.SizeOf(typeof(MyStruct));
IntPtr buffer = Marshal.AllocHGlobal(sz);
Marshal.StructureToPtr(str, ptr, false);
byte[] mem = new byte[sz];
Marshal.Copy(buffer, mem, 0, sz);
Marshal.DestoryStructure(buffer);
Marshal.FreeHGlobal(buffer);
4. 上面的代码需要两次Copy内存,性能比较差。
如果可以使用unsafe代码的话,可以直接把byte[]指针转换成IntPtr, 可以省下一次内存Copy。
binbin2000
2003-05-23
打赏
举报
回复
笨。
飞不动
2003-05-23
打赏
举报
回复
建议你用XML和WebService.
在客户端读取WEbService传来的DataSet可以满足你的要求
gogogo
2003-05-23
打赏
举报
回复
"关于把字节流转成Int和Float,你可以查查以前的贴子,有这方面的内容,FAQ里面好像也有"
用什么关键字在哪里查,请告诉我好吗?
gogogo
2003-05-23
打赏
举报
回复
timmy3310(Tim) 你来了,我很高兴,我实说了吧,我在开发一个使用ICMP的程序,我知道ICMP的格式,我看过类似的C++程序,很容易懂,我想写个C#的这才发现没法将收到的包转化到结构中,自然我没法使用序列化。我只希望如果不知道解决办法,请告诉我几个可能有这方面信息的网站也可以,谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
timmy3310
2003-05-23
打赏
举报
回复
如果你的发送方也是.Net的应用程序,那么你可以把传送方式改改,使用Binary方式序列化一个结构,反序列化的时候可以直接反序列化成你的结构,具体使用请参考MSDN:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconbinaryserialization.htm
如果发送方不是.Net应用程序,而且发送的格式不能改,那么没有先成的方法直接序列化成你的结构,你只有手动的解析流的内容,一个字节一个字节读出来,然后按照你的格式转成你的值,关于把字节流转成Int和Float,你可以查查以前的贴子,有这方面的内容,FAQ里面好像也有
字符串的话,你需要知道编码方式,然后用Encoding.GetString的方法把字节数组转成相应编码的字符串
tjq_tang
2003-05-23
打赏
举报
回复
关注
gogogo
2003-05-23
打赏
举报
回复
难道.net framework不能实现吗?而且我接受的包是一个其它机器发回来的,我没法控制它,我只知道他发来的包的结构,我不能对他序列化,应为这个问题在C、C++中很简单,但是在VB、Delphi中很难实现,现在我觉得C#功能挺强大的,没想打着也要借助unsafe的指针,这使我很失望,难道这里没有在VB或Delphi中解决过类似问题的人吗?
gogogo
2003-05-23
打赏
举报
回复
saucer(思归, MS .NET MVP),TheAres(班门斧),timmy3310(tim)等大虾都在哪里?来指导指导小弟了。
platform
2003-05-23
打赏
举报
回复
你还不如直接传输为xml,一个xml一个包
coollzh
2003-05-23
打赏
举报
回复
推荐用unsafe代码
如果你的接受的流的对象格式很清楚,也可以用反序列化
大象高端营销:家装电话营销细节和技巧
电话营销话术 1、请问是XX先生吗?有知道全名便称呼其全名。 我是桂林家装十强设计俱乐部的,我姓胡,XX先生(女士)是这样的,打电话给您呢,是有个
非
常棒的资讯要与您分享,就是在本周日上午10点到下午6点。我们将邀请80位要装修的业主一起参加一场家装设计咨询会(若不耐烦便说请问你家装修到哪一个阶段了呢?) (慢点有节律自然的谈话,
不要
说得太快,没有停顿,相信他不会挂断) 会有多名资深设计师现场为您解答您将要遇到的各种装修
难题
,请问您是和家人一起来呢还是自己来?客户回答:准备装修的(对活动感兴趣,询问具体
时间
和
测试dddd
--------------------------------------------我也来试着分析下你想以低价来占领市。--------------------------------------------------------------如果按一天 5000 营业额来算,也有 500 元,也过得。比方说,你有 10 万元,第一年增值 20%,就变成 12 万,第二年也增值 20%,那可不是 14 万。
精进:如何成为一个很厉害的人--作者:采铜
精进:如何成为一个很厉害的人 作者:采铜 文章目录精进:如何成为一个很厉害的人序 用更勇敢的方式去生活01
时间
之尺 我们应该怎样对待
时间
活在“全部的现在” 从当下出发,联结过去与未来那么,一个人应该怎样对待
时间
呢?不同场合,不同的
时间
视角由当下向过去与未来延伸对五年后的自己提问 如何解决远期未来与近期未来的冲突?两种未来视角下的思维差异如何解决生活里两种未来的冲突?我们总是在重复地抓起沙子 把时...
今年年底看了阿里P7的工资单以及招聘需求:懂点算法,就这么香
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少
时间
摸索、精力
浪费
的方式。我们选择的这个行业就一直要持续的学习,又很吃青春饭。虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。送给每一位想学习Java小伙伴,用来提升自己。一个人可以走的很快,但一群人才能走的更远。
材料专业就业方向有哪些,材料人就业工作?
7年材料专业转行的学长,带你看下材料人真是就业情况? 往期文章链接:芯片验证自学入门教程 下面内容来自网友: 我是一名 985 材料专业毕业的研究生,在秋招中我陆续拿到了中航光电、歌尔声学、吉利、恒大等 8 个 offer。 虽然没能进入我之前想去的互联网公司,但我所求的也不能更多了。 下面就给大家讲讲,进入社会的我对于求职的反思与经验。 「我看不到未来。」 这是 2019 年 3 月,我向刚参加工作的冯师兄询问「最近工作怎么样」时,他给我的答复。2018 年秋招,冯师兄的「三方」签在了深圳富士康,每月工资
C#
110,567
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章