关于 recv函数 第二个参数

zwbhwa 2012-10-08 02:36:22
char recvBuf[100];
memset(recvBuf ,0 ,100 );
recv(ClientSocket, recvBuf ,100 , 0);
-------------------------------------
上述写法第二个参数没问题,请问怎么姜recvbuf改成string类型 使用,用string.c_str()不行,因为是 const char *类型,而第二个参数是char *类型,求大神解答
...全文
241 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwbhwa 2012-10-08
  • 打赏
  • 举报
回复
while( !bRecv )
{
int buflen = recv(ClientSocket, recvBuf ,sizeof(recvBuf), 0);
printf(" %d", buflen);
if (buflen == sizeof(recvBuf))
{
memset(recvBuf ,0 ,10 );
}
else
{
bRecv = TRUE;
}
}
------------------------------------
这样循环recv时 当数据正好和缓冲区大小一样 就跳不出来……
[Quote=引用 4 楼 的回复:]

不能使用string,因为其长度未知。
如果觉得缓冲区比较小,可以分多次recv
[/Quote]
zwbhwa 2012-10-08
  • 打赏
  • 举报
回复
能帮忙写个循环recv的例子吗?最后还要把recv的数据打印到控制台
[Quote=引用 6 楼 的回复:]

你调用recv的时候,有个长度就是你的buffer的长度,所以socket是不会写到你的buffer之外的,这一点可以放心。理论上,你的buffer哪怕只有一个字节,也能成功接收任何大小的数据;

无论你的buffer有多么的大,也不如数据大,所以循环接收是免不了的。
[/Quote]
youngwolf 2012-10-08
  • 打赏
  • 举报
回复
你调用recv的时候,有个长度就是你的buffer的长度,所以socket是不会写到你的buffer之外的,这一点可以放心。理论上,你的buffer哪怕只有一个字节,也能成功接收任何大小的数据;

无论你的buffer有多么的大,也不如数据大,所以循环接收是免不了的。
youngwolf 2012-10-08
  • 打赏
  • 举报
回复
recv不能使用string(就算你预先为string分配了足够的内存,也可能有问题,string是一个非常复杂的类,要避免直接操作其内存),发送可以。

就用数组是最好的。
sumos 2012-10-08
  • 打赏
  • 举报
回复
不能使用string,因为其长度未知。
如果觉得缓冲区比较小,可以分多次recv
zwbhwa 2012-10-08
  • 打赏
  • 举报
回复
那接收数据只能用字符数组吗?可是我不知道我接收的数据多大咋办
[Quote=引用 2 楼 的回复:]
不要直接使用string的数据
因为string的数据是动态增长的
[/Quote]
ouyh12345 2012-10-08
  • 打赏
  • 举报
回复
不要直接使用string的数据
因为string的数据是动态增长的
wsxzx1 2012-10-08
  • 打赏
  • 举报
回复
用const_cast<char*>

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧