社区
通信技术
帖子详情
关于send的问题
SeekInRain
2000-08-18 01:44:00
客户机与服务器之间用sock_stream传送文件,把send放在读文件循环中,也就是用readfile读完, 就将buffer中的数据用send发送出去, 这个循环的速度很快, 接收文件那一端是否来得及接收?? 可不可以在发送前阻塞一下, 并检测是否可以继续发送.如可以的话, 就继续发送, 否则就继续阻塞. 怎样实现????
...全文
207
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中加个延时应该就可以了吧。
关于
send
时产生WSAEWOULDBLOCK
问题
关于
send
时产生WSAEWOULDBLOCK时的处理办法,得出如下结论: 产生这个错误只是说明out buffer已经满了,不代表出错. 可以等待FD_WRITE消息,此时将没有发送完成的数据再次发送出去. WSAEWOULDBLOCK错误意味着请求的操作...
关于Electron react 使用 ipcRenderer.
send
报错的
问题
关于Electron react 使用 ipcRenderer.
send
报错的
问题
Tcp
send
阻塞
问题
如果发送缓存大小比请求发送的大小要大,那么
send
函数立即返回,同时向网络中发送数据;否则,
send
会等待接收端对之前发送数据的确认,以便腾出缓存空间容纳新的待发送数据 解决方法: 参考链接 步骤: 1)修改接收端,发送...
C#中的
Send
Keys.
Send
操作CMD命令的
问题
C#的
Send
Keys.
Send
或
Send
Keys.
Send
Wait用法。
C# Socket的
Send
问题
C#中Socket的
Send
方法即使是在阻塞模式下也会立即返回,查了不少资料,都没什么结果,最后在MSDN找到了答案。
Send
的发送默认是不带参数的,其实是写入了本地缓存区,然后基础系统拆分后分批次发送。如果想要实现...
通信技术
4,354
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章