社区
通信技术
帖子详情
WinSocket中recv函数的问题
nibani
2003-01-06 09:40:02
我用WinSocket API写了一个从www服务器中获得网页内容的程序。
但在使用recv函数时遇到了如下问题:
当获取某些较小的(几百个字节到几千个字节)GIF/JPG图像文件时,
recv函数总是只能获得很少的一部分数据,
然后就阻塞(我用的是阻塞模式)。
过了一会儿recv返回0值,说获取完了。
但事实上还有大部分数据没有取得。
对html,swf等文件却没有这样的情况。
为什么呢?
有写过代理服务器程序的吗?有没有遇到这样的问题?
...全文
151
6
打赏
收藏
WinSocket中recv函数的问题
我用WinSocket API写了一个从www服务器中获得网页内容的程序。 但在使用recv函数时遇到了如下问题: 当获取某些较小的(几百个字节到几千个字节)GIF/JPG图像文件时, recv函数总是只能获得很少的一部分数据, 然后就阻塞(我用的是阻塞模式)。 过了一会儿recv返回0值,说获取完了。 但事实上还有大部分数据没有取得。 对html,swf等文件却没有这样的情况。 为什么呢? 有写过代理服务器程序的吗?有没有遇到这样的问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SuperFC
2003-02-10
打赏
举报
回复
对tcp/ip来说有一个窗口大小问题,接收端会对窗口大小进行调节;
所以,我想你的程序可能应该成下面这个模式:
char rec[4096];
int ret,nLeft,nIndex;
nLeft = 4096;
nIndex = 0;
while( nLeft > 0 )
{
ret = recv(s, &rec[nIndex], nLeft, 0)
if( ret == SOCKET_ERROR)
{
printf("errror\n");
exit(1);
}
nIndex = nIndex + nLeft;
nLeft = nLeft - ret;
}//while
gold_stone
2003-01-08
打赏
举报
回复
你没有必要用循环等待再break;read()函数需要有时间参数,因为阻塞模式需要等待再次发送,如果超时将返回空值。
nibani
2003-01-07
打赏
举报
回复
while(1)
{
retval = recv(sPTR,Buffer,sizeof (Buffer),0 );
if (retval == SOCKET_ERROR )
{
closesocket(sPTR);
break;
}
Len=retval;
if (Len == 0 && IsCTRClose == true)
{
closesocket(sPTR);
break;
}
if(Len!=0)
{
retval = send(sCTP,Buffer,Len,0);
if(retval == SOCKET_ERROR)
{
closesocket(sPTR);
break;
}
}
}
这是有关的代码。该怎么改?
Nepton
2003-01-07
打赏
举报
回复
把程序贴出来!
肯定是你的程序错了
nibani
2003-01-07
打赏
举报
回复
GIF/JPG文件中有回车换行符吗?
如果有,应该怎么避免?
xysome
2003-01-06
打赏
举报
回复
如果碰到回车换行符,就停止
Win
Socket
常用
函数
及结构
fd_set 结构用于 select
函数
中
,存储感兴趣的套接字句柄集合。 **成员变量**: - `fd_count`:DWORD 类型,表示 fd_array
中
存放的套接字句柄数量。 - `fd_array`:
SOCKET
类型,长度为 FD_SETSIZE 的数组,存储套...
win
socket
函数
大全-
中
文
以上只是
Win
Socket
函数
的一部分,实际上还有更多如`send()`, `
recv
()`, `select()` 等用于发送和接收数据,以及错误处理和套接字状态管理的
函数
。理解并熟练运用这些
函数
是进行高效、可靠的网络编程的基础。在实际...
win
socket
编程c++实现
本主题将深入探讨如何使用C++进行
Win
socket
编程,尤其是在构建基于对话框的
Win
dows应用程序
中
实现网络数据传输。 首先,让我们了解
Win
sock的基本概念。
Win
sock是
Win
dows操作系统对Berkeley套接字API(
Socket
API)...
Win
Socket
编程C++源代码
在C++
中
,我们通常会使用`#include <
win
sock2.h>`头文件来引入
Win
Socket
的相关
函数
,并且需要链接`ws2_32.lib`库。在开始编程之前,需要调用`WSAStartup()`
函数
初始化
Win
Socket
环境,结束后则通过`WSACleanup()`清理...
win
socket
入门教程
Win
socket
是
Win
dows操作系统
中
用于网络通信的一个核心API,它提供了标准的Berkeley
Socket
s接口,使得开发者能够在
Win
dows平台上编写跨平台的网络应用程序。本入门教程将深入探讨如何使用
Win
socket
来构建TCP(传输...
通信技术
4,391
社区成员
28,906
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章