VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 710|回复: 3

远控封装MyRecv接收方法

[复制链接]
38_avatar_middle
最佳答案
0 
online_vip 发表于 2018-4-21 13:09:12 | 显示全部楼层 |阅读模式
本帖最后由 2191265529 于 2018-4-22 10:51 编辑
  1. int CMySocket::MyRecv(SOCKET socket, char* buf, int bytes)
  2. {
  3.         char *b = (char*)buf;
  4.         while (bytes > 0)
  5.         {
  6.                 int r = recv(socket, b, bytes, 0);
  7.                 if (r < 0)
  8.                 {
  9.                         return 0;
  10.                 }
  11.                 else if (r == 0)
  12.                 {
  13.                         break;
  14.                 }
  15.                 bytes = bytes - r;
  16.                 b = b + r;
  17.         }
  18.         return b - (char*)buf;
  19. }
复制代码


1.recv()方法返回r = 0代表接收失败,可是MSDN中没有写recv()方法返回0的方法;
2.return b - (char*)buf;代表的是指针的位移,表明recv接收数据有效。我怎么感觉不好看,都是这样写的吗
1.jpg




上一篇:为什么这个程序的 printf和 scanf 运行不了?
下一篇:求大神帮忙把从CString转为char
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-21 13:25:09 | 显示全部楼层
1、MSDN中这不是明确说着呢么?
If the connection has been gracefully closed, the return value is zero.

2、因为可能接收的数据量比较多,比较大,比如对方发送过来1个G的文件,所以 recv 不可能一次都接收过来,一般都是要循环接收的。
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-4-21 22:06:40 | 显示全部楼层
Syc 发表于 2018-4-21 13:25
1、MSDN中这不是明确说着呢么?
If the connection has been gracefully closed, the return value is zer ...

代码中if(r<0)这个条件能成立吗,r没有返回0的可能性啊?
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-22 00:09:17 | 显示全部楼层

我上面的帖子不是回答了吗?
1、MSDN中这不是明确说着呢么?
If the connection has been gracefully closed, the return value is zero.
如果连接被关闭了,那么 recv 就返回 0
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-14 20:30

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表