社区
通信技术
帖子详情
关于send的问题
SeekInRain
2000-08-18 01:44:00
客户机与服务器之间用sock_stream传送文件,把send放在读文件循环中,也就是用readfile读完, 就将buffer中的数据用send发送出去, 这个循环的速度很快, 接收文件那一端是否来得及接收?? 可不可以在发送前阻塞一下, 并检测是否可以继续发送.如可以的话, 就继续发送, 否则就继续阻塞. 怎样实现????
...全文
214
6
打赏
收藏
关于send的问题
客户机与服务器之间用sock_stream传送文件,把send放在读文件循环中,也就是用readfile读完, 就将buffer中的数据用send发送出去, 这个循环的速度很快, 接收文件那一端是否来得及接收?? 可不可以在发送前阻塞一下, 并检测是否可以继续发送.如可以的话, 就继续发送, 否则就继续阻塞. 怎样实现????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzh
2000-08-19
打赏
举报
回复
其实没必要这样的。你可以从CAsyncSocket派生一个类,用它的Send来发送数据,然后再判断Send的返回值,如果返回值等于发送的实际字节数,表明发送成功,可以进行下一次发送,如果实际发送字节数小于缓冲区中数据,下一次就发送末完成的任务,直到发送完成。如果返回SOCKET_ERROR,可以用GetLastError()来获取错误信息。只要成功发送出去了,接收方就一定能收到。这是由操作系统决定的。当然,你得用流方式。
SeekInRain
2000-08-19
打赏
举报
回复
borz说的对, 我也是这么做的. 发送方send后, 立即recv, 等待接收方的回应, 而接收方收到发送方的数据后, 立即send, 前面因为recv而阻塞的发送方因为收到接收方发来的数据, 进程便可继续下去, 也不太会发生发送方发出的数据接收方来不及收. 如果大家还有什么更好的办法, 不吝赐教.(请别用mfc~~~~~~~~~~~~)
borz
2000-08-18
打赏
举报
回复
分块发送(大小视情况而定)
接收那一端:收到一个块后,写一个字节
发送那一端:发送一个块后,读一个字节
这样就可以相互依赖了,而不会因为一方发送了而另一方还没接收完
lazybug
2000-08-18
打赏
举报
回复
当网络速度比较慢或对方接收速度慢或系统的发送缓冲区已满,
send会发不出去,从send返回的结果可以看出;
最好在send前判断当前socket是否可写,这样便于控制程序。
kingwill
2000-08-18
打赏
举报
回复
我们都碰上了同样的问题。你做的是什么啊?和我的很象吗!
不知道你用的是什么类,如果是CSOCKET的话,你就不用担心对方会不会来得及收到,因为这个类是阻塞的,直到对方完全接到信息。此时你要注意,如果这样的话,如果一个用户阻塞的话,你的整个线程就会阻塞,其他任何程序都被挤掉。所以,一定要设TIMEOUT。
如果你用的是CASYNCSOCKET类的话,它是非阻塞的,也就是他回在将要阻塞时返回一个值,把控制权交还给你,不会霸占线程。你只要控制一下重发就可以了,一般来讲,发两次就可以了。
其实,SOCKET编程最好的是用SDK来写,效率高。而且它是非阻塞的。
Sniper
2000-08-18
打赏
举报
回复
没有试过。我想在两次Send中加个延时应该就可以了吧。
基于NDK、C++、FFmpeg的android视频播放器开发实战
课程包含了对流媒体(拉流)的播放,演示了播放rtmp的香港卫视,支持rtsp摄像头和http网络视频的播放,支持访问本地的视频文件,并精确显示和控制播放进度:1讲解如何编译Android平台的ffmpeg库,使其支持neon技术和硬解码,并测试性能2使用opengles的NDK shader高效播放yuv视频,不耗费cpu性能更优(GPU)3代码支持硬解码(省电不耗cpu)和多线程解码(高性能每秒解码240帧1080p)4支持网络流媒体(rtmp,rtsp,http)可直接拉流播放电视并支持rtsp摄像头访问5课程将设计模式应用到实践 - 观察者,构建者,门面,代理,适配器,单件模式
关于
send
时产生WSAEWOULDBLOCK
问题
关于
send
时产生WSAEWOULDBLOCK时的处理办法,得出如下结论: 产生这个错误只是说明out buffer已经满了,不代表出错. 可以等待FD_WRITE消息,此时将没有发送完成的数据再次发送出去. WSAEWOULDBLOCK错误意味着请求的操作在调用期间没有时间完成
关于Electron react 使用 ipcRenderer.
send
报错的
问题
关于Electron react 使用 ipcRenderer.
send
报错的
问题
Tcp
send
阻塞
问题
原因 如果发送缓存大小比请求发送的大小要大,那么
send
函数立即返回,同时向网络中发送数据;否则,
send
会等待接收端对之前发送数据的确认,以便腾出缓存空间容纳新的待发送数据 解决方法: 参考链接 步骤: 1)修改接收端,发送端的系统缓冲区大小 echo 10000000 > /proc/sys/net/core/wmem_max echo 10000000 > /proc/sys/net/core/rmem_max 2)设置socket buffer的大小 接收端代码(发送端也是类似,我这里
C#中的
Send
Keys.
Send
操作CMD命令的
问题
C#的
Send
Keys.
Send
或
Send
Keys.
Send
Wait用法。
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章