socket 的问题·

永远的明日 2008-12-27 11:22:00
请问怎样判断recv()是否结束啊?还有socket中服务器和客户端有什么区别(可以相互传文件吗?)?新手,请大大指教··
BUF_SIZE = 4*1024;
while(1)
{
bytes = recv(sa,buf,BUF_SIZE,0);

if(bytes < BUF_SIZE )//是用bytes < BUF_SIZE作条件吗?小文件可以,不知道为什么大一点的文件就不行,而用bytes<=0作条件刚好想反···
{
file.Close();
return;
}
file.Write(buf,bytes);

}
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoxOnWeb 2008-12-28
  • 打赏
  • 举报
回复
问题大了,

1. recv可以返回负数,如果出错的话,
2, recv一次返回值可能小于你要传递的字节数,如果发生多次传递,

自己再写吧。



wangyaosuper 2008-12-28
  • 打赏
  • 举报
回复
bytes == 0 时说明已经把缓存的数据读完了阿。

BUF_SIZE 是你想读的最大的长度,


bytes是实际读到的长度,

可以这样做

bytes = 1;

while (!bytes)
{
bytes = revc();
}

服务器开一个事先约定的端口,监听,

客户端可以随便选一个自己ip的端口去连服务器的监听端口
hityct1 2008-12-28
  • 打赏
  • 举报
回复
阻塞模式还是非阻塞模式?
永远的明日 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyljerry 的回复:]
发送包里包含数据大小,接收到对应大小数据,就可以结束了
[/Quote]
哦,知道了,谢谢了,能告诉我为什么bytes < BUF_SIZE不可以吗??
oyljerry 2008-12-27
  • 打赏
  • 举报
回复
发送包里包含数据大小,接收到对应大小数据,就可以结束了
永远的明日 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
返回值:
若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。
[/Quote]

如果我还未想断开连接,怎么判断结束?


oyljerry 2008-12-27
  • 打赏
  • 举报
回复
返回值:
若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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