社区
网络编程
帖子详情
recv到数据后放入到缓冲区中处理
rightorwrong
2010-05-11 05:58:39
有多种命令进行处理,服务器端recv收到的数据包可能不是一个完整的逻辑包,也可能是收到了多个逻辑包。现在想把收到的数据放到缓冲区,由另一个线程解析出逻辑包,进行处理,有点需要返回。在返回时不知道要发到哪一个socket,这个怎么处理呢。
请指点下
...全文
181
9
打赏
收藏
recv到数据后放入到缓冲区中处理
有多种命令进行处理,服务器端recv收到的数据包可能不是一个完整的逻辑包,也可能是收到了多个逻辑包。现在想把收到的数据放到缓冲区,由另一个线程解析出逻辑包,进行处理,有点需要返回。在返回时不知道要发到哪一个socket,这个怎么处理呢。 请指点下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
【天运子】
2010-05-29
打赏
举报
回复
用数组 链表 容器 都可以
rightorwrong
2010-05-15
打赏
举报
回复
to ilovejanx,这样的话就是一个socket一个缓冲区,你说的是结构体缓冲区吧,缓冲区里放的是一个socket和数据的结构体,每次接收到的数据可能并不是一个完成的包,还要做数据解析。
你说的做不到啊
很麻烦哪
ilovejanx
2010-05-14
打赏
举报
回复
heihengheng 说的怎么不行?
定一个结构体,包含每个数据包的hash标志 和数据本身,放到缓冲区中。需要做同步处理,可以用双缓冲试试看
heihengheng
2010-05-13
打赏
举报
回复
根据IP 做哈希表 来区分不同的用户。我就是这样做的。
【天运子】
2010-05-13
打赏
举报
回复
用到连接池,可以保留多个连接的套接字,可惜我不会,我也在找连接池的资料。。。
rightorwrong
2010-05-13
打赏
举报
回复
to heihengheng,是不行的啊。把收到的数据放到一个缓冲区,用怎样的方法来把这个socket和数据对应起来。在后面解析完成处理后直接向这个socket返回呢?
rightorwrong
2010-05-12
打赏
举报
回复
to bragi523,如果以socket为索引的话,这样每个接入的客户端都会有一个缓冲区,这样肯定不好处理,接入的客户端太多了。
to jenf,把收到的数据放到缓冲,另一个线程解析后经过处理不知道是那个socket发送过来的,该向哪个socket返回处理结果了
还有什么好的方法么,大家帮忙想想怎么做才好呢
jenf
2010-05-11
打赏
举报
回复
如果是tcp的话,就发给你accept时返回的客户的的socket
是UDP的话,使用sendto可以直接发送给IP+端口
bragi523
2010-05-11
打赏
举报
回复
可以以sock为索引存map
send函数和
recv
函数
flags:收发
数据
时指定的可选信息; – 当flags为0时, send等待发送
缓冲区
清空后把
数据
放入
缓冲区
再返回(有可能等待),
recv
等待
数据
缓冲区
有
数据
后获取再返回(有可能等等待); – 当flags为0时, send()/
recv
() 在功能上等价于 write()/read() ; flags可选配置: 可选项 含义 send
recv
MSG_OOB 用于传输带外
数据
(Out Of Band data),即:紧急
数据
✔ ✔ MSG_PEEK 窥探接收
缓冲区
是否存在
数据
TCP/UDP
缓冲区
满
TCP/UDP
缓冲区
满
Q:本地同时与多个主机建立连接,如果这些主机同时发生
数据
到本地,而本地又没有调用
recv
进行
处理
,会出现什么情况?
A:系统为每个socket建立一个缓存,ip层组包进程在收到
数据
包后会把
数据
放入
socket缓存。调用
recv
将socket缓存的内容copy到程序定义的缓存,如果通信进程不能及时
recv
,将导致该socket缓存满。如果用tcp协议,socket缓存满以后,系统会向对方发出错误消息,对方回收到wsaewouldblock错误,如果是
深入理解tcp网络编程
中
的send和
recv
深入理解tcp网络编程
中
的send和
recv
每个TCP socket在内核
中
都有一个发送
缓冲区
和一个接收
缓冲区
,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。 接收
缓冲区
把
数据
缓存入内核,应用进程一直没有调用read进行读取的话,此
数据
会一直缓存在相应 socket的接收
缓冲区
内。即不管进程是否读取socket,对端发来的
数据
都会...
TCP之send &
recv
接触过网络开发的人,大抵都知道,上层应用使用send函数发送
数据
,使用
recv
来接收
数据
,而send和
recv
的实现原理又是怎样的呢? 在前面的几篇文章
中
,我们有提过,TCP是个可靠的、全双工协议。其流量控制或者拥塞控制依赖于滑动窗口和拥塞窗口的滑动来实现,而这两个窗口的滑动实现则是依赖于TCP
中
的两个buffer,这两个buffer则是TCP socket在内核
中
的发送
缓冲区
(send buffer)和接收
缓冲区
(
recv
buffer)。 在本文
中
,我们首先会简单介绍下TCP
中
发送
缓冲区
和接收缓..
C++网络编程学习:
缓冲区
溢出与粘包分包
网络编程学习记录 使用的语言为C/C++ 源码支持的平台为:Windows / Linux 笔记一:建立基础TCP服务端/客户端 点我跳转 笔记二:网络
数据
报文的收发 点我跳转 笔记三:升级为select网络模型 点我跳转 笔记四:跨平台支持Windows、Linux系统 点我跳转 笔记五:源码的封装 点我跳转 笔记六:
缓冲区
溢出与粘包分包 笔记六网络编程学习记录一、关于
缓冲区
溢出1.
缓冲区
溢出的原因2.
缓冲区
溢出的
处理
方法二、粘包与分包1.粘包与分包的原因2.粘包与分包的
处理
方法2.1客户
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章