Socket数据包解析

jiaoshiyao 2014-05-22 11:25:30
RT
Socket发送一次数据 据说要有 一个起始标记 一个结束标记

这个在客户端怎么接受啊

比如一次数据1000个字节 连续发了两次 也就是2000个字节了 是两个结果

客户端 的接受方法是
var data = new byte[100];一次就接受100个
while()
{
int len = Socket.Receiver(data);
}
怎么解析 !!!
...全文
1118 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmg494005678 2014-05-22
  • 打赏
  • 举报
回复
根据你定义的协议规则来解析啊
WM_JAWIN 2014-05-22
  • 打赏
  • 举报
回复
这需要你协定一个包的定义。采用TCP的会按发送顺序到达,如果用UDP,顺序可能是乱的
wmg494005678 2014-05-22
  • 打赏
  • 举报
回复
你所谓的1000个字节发送2次,实际上是你的一厢情愿的认为,Socket在发送的时候默认是有一个缓冲区的,等缓冲区满了的时候才会发送,比如缓冲区大小是1500,你先发送1000,这个时候1000在缓冲区里面,并没有发送,等你发送第二个1000的时候,缓冲区里面1500满了,发送,还剩下500,你关注的就是你这个消息的结构是什么,如何定义
於黾 2014-05-22
  • 打赏
  • 举报
回复
自己做数组拼接吧.
jiaoshiyao 2014-05-22
  • 打赏
  • 举报
回复
难道 你规定一个请求 数据不能大于10000 那文件怎么传。。。
jiaoshiyao 2014-05-22
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
引用 4 楼 jiaoshiyao 的回复:
[quote=引用 3 楼 sunny906 的回复:] 要么在发送1000个字节的数据时,分10次分送,一次发送100个字节;要么把接收时候的缓冲区长度设置为1000
重点是什么?
重点就是,所谓协议,必须是收的人知道发的人发的东西是什么. 我冲你眨眼睛,眨到流眼泪了,你还看不懂,我眨的有意义么? 必须协商好,我发给你1000个字节,都是什么,又发给你1000字节,又是什么.然后你也要对应的1000个字节1000个字节的去处理. 我发给你1000个,你只收100个,你是要闹哪样啊.[/quote] 不可能直接使用1000个来接受 万一 对面传来的一个包有10000个字节呢 要是传过来的是一个4G的文件呢 我不可能创建一个4G的数组来接受 我默认接的个数是65535个 但是 数据量大的时候 65535个不够用
於黾 2014-05-22
  • 打赏
  • 举报
回复
引用 4 楼 jiaoshiyao 的回复:
引用 3 楼 sunny906 的回复:
要么在发送1000个字节的数据时,分10次分送,一次发送100个字节;要么把接收时候的缓冲区长度设置为1000
重点是什么?
重点就是,所谓协议,必须是收的人知道发的人发的东西是什么. 我冲你眨眼睛,眨到流眼泪了,你还看不懂,我眨的有意义么? 必须协商好,我发给你1000个字节,都是什么,又发给你1000字节,又是什么.然后你也要对应的1000个字节1000个字节的去处理. 我发给你1000个,你只收100个,你是要闹哪样啊.
於黾 2014-05-22
  • 打赏
  • 举报
回复
发送和接收长度不一致,有什么必要么?为什么非要如此设计?
jiaoshiyao 2014-05-22
  • 打赏
  • 举报
回复
引用 3 楼 sunny906 的回复:
要么在发送1000个字节的数据时,分10次分送,一次发送100个字节;要么把接收时候的缓冲区长度设置为1000
重点是什么?
sunny906 2014-05-22
  • 打赏
  • 举报
回复
要么在发送1000个字节的数据时,分10次分送,一次发送100个字节;要么把接收时候的缓冲区长度设置为1000
感谢大家对北风之神SOCKET框架的支持。鼓励。下面是北风之神 3.1的更新内容: 修正BUG: 1.ZYSocketSuper 读取 配置文件的最大连接数 读错问题。 2.ZYSocketSuper 无法断开客户端的问题。 3.BuffList 数据包解析丢失问题。 4.例1,例2.客户端断开忘记释放调用SOCKET.CLOSE()的问题 新增功能 1.添加了一个ReadBytes 构造函数,此函数实现了在数据包在读取前需要回调的方法传入。(可以用来解密,解压缩 等功能) 2.添加了一个BufferFormat 类的构造,此函数实现了在数据包在生成前需要回调的方法传入。(可以用来加密,压缩 等功能) 3.添加了BufferFormat.FormatFCA(object o,FDataExtraHandle dataExtra)静态方法。可以用来在类格式化成数据包的时候进行加密压缩等功能 4.添加了ZYSocket.Security 命名空间,里面有传统的AES,DES算法的加解密类 5.添加了ZYSocket.Compression命名空间,里面有通过Deflate算法压缩类 6.开发了ReadBytes.Data属性,为ReadBytes里面的BYTE[]对象。值得注意的是 ReadBytes.Length为数据包原始长度,如果要得到解压缩后的数据包长度,请访问ReadByte.Data.length 新增代码 加解密实例测试 项目:演示了 AES DES 以及Deflate 的使用方法。 例3 - 例2的加密版 项目:就是讲例2通过DES 加密进行通讯的例子 连接测试工具 项目:很多朋友问我要连接数量测试工具。我一起的真的丢了。找不到了。所以重新写了一个 例4 项目:好多人让我写一个发送文件的例子,现在能如愿以偿了 by luyikk@126.com BLOG:http://blog.csdn.net/luyikk QQ:547386448

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧