首页
社区
课程
招聘
[求助]关于传送数据长度的socket编程send/recv问题。
发表于: 2013-8-13 10:03 8007

[求助]关于传送数据长度的socket编程send/recv问题。

2013-8-13 10:03
8007
socket编程,如果recv端不知道send端一次send传多少字节的数据,而又要接收,貌似不可行吧!

因为recv的接收是定长,如果定的超过还好说,如果定的不够貌似就会丢失吧!?如果因为定长小了而导致一次收不完,好像也没法判断并进行第2次继续recv吧!?

本人socket编程初级,望指教!!!谢谢。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
2
send端发送时对可以对数据进行编码 ,比如长度+字节集内容+长度+字节集内容...这样的结构,例如以{0}做结束标志,接收端以1K为单位接收,直到接收到{0}。
2013-8-13 11:19
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
send/recv是同步的,一个send对应一个recv,这是一个全双工模式
在正式交互数据之前,一般都要做一个是否Link成功的校验
而且通信双方都是有一整套协议的,数据包类型啊,长度啊等等,所以不存在LZ的这些的问题
比方说,客户端和服务器Link成功后,客户端先向服务器发出一个请求
这个发出请求的数据包长度可以很小(保证服务器接收数据的缓冲区够用),里面就有事先规定好的数据包类型
有了这个数据包类型,服务器就知道下一次要接收的数据包长度等信息,再根据长度分配好缓冲区
当然了,如果不存在这个数据包类型,服务器就不会响应,确认后服务器向客户端发出通知,已准备好接收数据
同样这个发出通知的数据包长度也足够小(保证客户端接收数据的缓冲区够用)
客户端收到这个通知后,就可以向服务器发出正式的数据包了,然后服务器就用之前分配好的缓冲区来接收
最后服务器根据接收到的数据包来执行对应的操作,并反馈给客户端,这一来一去就完成了一个全双工的通信
有了这一套事先规定好的协议,通信双方就不存在什么问题了
2013-8-13 11:20
0
雪    币: 213
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
LS两位说的,其实正是我所想的。只是我在问的是另一种可能。

虽然你们没有正面回答,但从侧面已经告诉我,这种可能不存在。

谢谢!
2013-8-14 22:53
0
游客
登录 | 注册 方可回帖
返回
//