tcp socket怎么接受一个数据包。 或者说对方先发了一个数据的大小,怎样先把大小收到,然后再收数据
4个回答
展开全部
自己规定一下数据帧格式,你可以这样,例如,你帧起始标志为FF FF,紧接着的4个字节来表示数据包的大小,后面的才是数据。如下:
|---2B---|---4B----|---nB---|
|-FF-FF|-----n----|xxxxxxxx|
那么你接收到FF FF之后继续接收接下来的4字节,再把那4字节转换成int(科学点应该是unsigned int)其值为n,那么你接着就把接下来的n字节当作一个数据包来接收并处理就行了。
提一下,TCP方式的包大小你基本上是没法控制的,因为它会根据实际的网络情况重新吧包拆分或者合并了,如果要求不高并且没必要一定要按时序来接收的话可以考虑UDP方式,UDP的能够把你的一个包完整的发过去并接收、组包之后告诉你。
|---2B---|---4B----|---nB---|
|-FF-FF|-----n----|xxxxxxxx|
那么你接收到FF FF之后继续接收接下来的4字节,再把那4字节转换成int(科学点应该是unsigned int)其值为n,那么你接着就把接下来的n字节当作一个数据包来接收并处理就行了。
提一下,TCP方式的包大小你基本上是没法控制的,因为它会根据实际的网络情况重新吧包拆分或者合并了,如果要求不高并且没必要一定要按时序来接收的话可以考虑UDP方式,UDP的能够把你的一个包完整的发过去并接收、组包之后告诉你。
追问
我明白你的意思,现在的情况是对方也把长度发过来了,可是长度所占的字节数不固定,就好比http回复内容那样,长度都是不固定的
追答
你收到的长度总该有一个让你知道是起始的标志吧,也总该有一个让你知道是结束的标志吧。
好吧,假如就像是HTTP那样子的吧,那么其实标志就是Content-Length:,结束标志就是\n了。
首先你接收Content-Length:之后就开始接收长度,只到接收到一个\n,然后把接收到的长度字符串转换成int,之后的接收和上一条回复差不多。
展开全部
自己约定一个小协议,比如每个数据包的前4个字节表示这次数据的大小,接收的时候,先读前4个字节,然后根据数据大小接收后面的数据
追问
我明白你的意思,现在的情况是对方也把长度发过来了,可是长度所占的字节数不固定,就好比http回复内容那样,长度都是不固定的
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主什么意思没太明白,可以先用sizeof把你要发的数据大小值给一个变量,把变量值单独发过去,然后再发你要发的数据。
不知道你要先发数据大小干啥,我一般都是令发送的buff和接受的buff都为1024, 当然,如果你数据量比较大的话可以设的大一点,注意两边要统一大小,若sendBuff比RecvBuff大,接受的时候会分两次接受,这样可能出现bug!
不知道你要先发数据大小干啥,我一般都是令发送的buff和接受的buff都为1024, 当然,如果你数据量比较大的话可以设的大一点,注意两边要统一大小,若sendBuff比RecvBuff大,接受的时候会分两次接受,这样可能出现bug!
追问
是对方先把大小发过来了,我怎样先接受到大小,而且那个值所占的字节数不固定
追答
发过来的不都是char的数组吗,转换成CString再转换为int型的呗!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对你来说就是一个字符数组,你直接取这个数组的大小就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询