社区
网络编程
帖子详情
socket发送与接收的困惑
xwffwx
2009-12-29 12:48:07
发送端发送1000字节,接收端发生FD_READ事件,假设这1000字节完整地一次性发送到了接收端
在事件处理中,用recv读出500字节即返回
此时发送端数据已发送完成,不再发新数据,
请问接收端是否还会产生FD_READ事件来提醒我还有500字节未处理
...全文
237
23
打赏
收藏
socket发送与接收的困惑
发送端发送1000字节,接收端发生FD_READ事件,假设这1000字节完整地一次性发送到了接收端 在事件处理中,用recv读出500字节即返回 此时发送端数据已发送完成,不再发新数据, 请问接收端是否还会产生FD_READ事件来提醒我还有500字节未处理
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xwffwx
2010-02-28
打赏
举报
回复
现在看了一些资料,了解到UDP是基于消息的协议,TCP是基于流的协议,所以TCP的数据接收情况要复杂些,要自己实现消息边界的保护,自己已经在编程中考虑了自己目前所知的各种情况,做了一个类似vb的winsock控件,目前测试中,改日与大家分享
xwffwx
2010-02-28
打赏
举报
回复
帖子结晚了,不好意思各位
ligeqiang
2010-01-02
打赏
举报
回复
你用的是UDP的,后面的会丢弃掉。UDP的要么全收,要么一个字节都收不到!
xwffwx
2010-01-02
打赏
举报
回复
实践出真知,先以最复杂的情况来实现再说
joey_
2010-01-02
打赏
举报
回复
沾包?
xwffwx
2010-01-02
打赏
举报
回复
楼上的,我用tcp,不是udp
xwffwx
2009-12-30
打赏
举报
回复
顶起来
xwffwx
2009-12-30
打赏
举报
回复
是吗?看来接收数据还要考虑很多的问题
极端的情况是包长度信息都被分拆在前后两次到达的数据包中
不动如岳
2009-12-30
打赏
举报
回复
[Quote=引用 12 楼 xwffwx 的回复:]
以前知道如果不做收发同步的话,前后发送的数据包会合在一起,
但我想知道数据包在经过发送接收过程后是否会被拆开
[/Quote]
会的,每次有数据到来时,都会产生FD_READ
zhengq06
2009-12-30
打赏
举报
回复
学习~
duyalong
2009-12-30
打赏
举报
回复
顶一下,学习中
青稞
2009-12-29
打赏
举报
回复
不会再有FD_READ,但Recv是从缓冲区里面取数据的,取多少你自己可以定的,没有取完可以继续调用Recv接着取,直到Recv返回0为止,这时表示缓冲区的数据取完了。。
ccpaishi
2009-12-29
打赏
举报
回复
缓冲区有数据的话,需要判断返回值来判断是否需要继续调用recv
lijianli9
2009-12-29
打赏
举报
回复
不会再有FD_READ,但是那些没有取出的数据是保存在socket数据系统缓冲区中的,如果你不关闭socket,这些数据一直在,如果你调用recv,那还可能取得那些数据。
xwffwx
2009-12-29
打赏
举报
回复
缓冲区有数据就可以select到FD_READ
-----------
这是我希望的,但现在有几种不同的意见了,有点拿不准,希望更多朋友参与讨论
如果是这样的话,那么每recv一次后是不是要重新调用select才能有FD_READ,还是说只要在socket连接完成后select一次后以后只要缓冲区有数据就会有FD_READ事件?
bragi523
2009-12-29
打赏
举报
回复
缓冲区有数据就可以select到FD_READ
xwffwx
2009-12-29
打赏
举报
回复
补充一下,我不是用UDP
xwffwx
2009-12-29
打赏
举报
回复
那也即意味着在FD_READ事件中必须把已达到的数据全部取出吗
如果不能全部取出的话,是否会象2楼说的那样,未取出的数据丢失了,再也取不到?
Wenxy1
2009-12-29
打赏
举报
回复
不会再有FD_READ风络事件通知。
xwffwx
2009-12-29
打赏
举报
回复
如果只是单纯recv的话,那么后500字节就做丢弃处理
-----------------
有点疑问,TCP协议不是有自己的缓存吗?
假如说发送端的缓冲大于接收端的缓冲,一定会发生数据丢失吗?
加载更多回复(3)
网页聊天室源码java-chat-
socket
.io:聊天
socket
.io
一般来说,浏览器在
接收
到客户端请求(request)的时候,会
发送
给服务器端进行处理,服务器端处理完毕后会返回结果(response), 这样就完整地完成了一次HTTP的请求。当客户端想再更新页面信息的时候,需要刷新浏览器,...
亮剑.NET深入体验与实战精要3
本书既考虑到实际开发中经常遇到的
困惑
和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
亮剑.NET深入体验与实战精要2
本书既考虑到实际开发中经常遇到的
困惑
和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
android蓝牙
socket
分包传输,蓝牙
socket
通信 数据如何
接收
不全呢
当前位置:我的异常网» Android»蓝牙
socket
通信 数据如何
接收
不全呢蓝牙...我的目的是通过蓝牙
socket
发送
一张图片,我是把图片转成byte[]类型
发送
的。
接收
端单步执行就可以收完图片,直接运行就
接收
不完了,
困惑
啊...
关于异步
socket
接收
数据的
困惑
以前没有注意到有这么一个问题,直到我在用异步
socket
接收
大数据的时候,发现
接收
数据不是每一次都能一下
接收
完,可能会分几次才能
接收
完,这时问题就出现了,怎样判断数据什么时候
接收
完了呢?我在网上搜了...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章