recv函数超时,怎么解决
发布时间:2011-07-03 07:14:23 文章来源:www.iduyao.cn 采编人员:星星草
recv函数超时,如何解决?
下面的代码实现发送HTTP请求到服务器,然后接收服务器返回的响应数据。主要代码如下:
SOCKET sock;
string serverHostName=”127.0.0.1”;
UINT serverPort=80;
sring url=”http:// 127.0.0.1/index.htm”;
sockaddr_in serverAddr;
hostent* host;
int retCode;
string str;
char buffer[4096+1];
host=gethostbyname(serverHostName.c_str());
if(host==NULL)
{
cout<<”不能解析主机”<<endl;
return -1;
}
sock=socket(AF_INET, SOCK_STREAM, 0);
serverAddr.sin_addr=*(struct in_addr*)host->h_addr;
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(serverPort);
cout<<”连接到服务器……”<<endl;
cout.flush();
if(connect(sock, (const sockaddr*)&serverAddr, sizeof(sockaddr))=SOCKET_ERROR)
{
cout<<”不能连接到指定主机”<<endl;
cout.flush();
closesocket(sock);
return -1;
}
// HTTP请求头,发送给HTTP服务器
sprintf(buffer, “GET %s HTTP/1.1\r\nHost:%s\r\n\r\n”, url.c_str(), serverHostName.c_str());
cout<<buffer;
cout.flush();
send(sock, buffer, strlen(buffer),0);
while(1)
{
// 接收HTTP服务器的响应数据
retCode=recv(sock, buffer, 4096,0);
if(retCode==0 || retCode==-1)
break;
buffer[retCode]=’\0’;
cout<<buffer;
cout<<flush();
str+=buffer;
}
程序运行后,while进行到第4次循环,就出现超时现象,程序失去响应(此时好像数据已经接收完毕)。如何解决recv函数的超时问题呢?
------解决方案--------------------
非阻塞socket
------解决方案--------------------
去查select函数就知道了非阻塞
------解决方案--------------------
方法1:
发送http请求包头时,加上connect: close, 服务器发送完网页后会关闭socket,你这面就能退出循环了。
方法2:
看看http协议,响应报文有个长度值,接受的时候记录一下儿已接受数据的长度,如果等于响应包头的长度值,就不要继续recv了
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
如果客户端的机子突然断了电,那服务端还能收到FD_CLOSE事件么?
如题.....
已查到解决方案(心跳包)
来人,结贴。。。
------解决方案...
-
IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线...
-
h264 与 RTP 的区别?
同样都是视频应用的协议,他们的关系或者在协议簇中的位置有什么区别?
------解决方案--------------------
H...
-
openmeetings错误 求解决
将doc文件上传时出现错误
错误代码:
Name: error
Value: 2011-6-4 12:54:14 com.artofsolving.jodconver...
-
为什么计算机网络中一定要有一个MAC层(MAC地址),既然MAC地址和IP地址是有一定的映射关系的,为什么不能只用其中一个地址通信就可以了,...
-
P2P软件有技术门槛吗?
讨论一下P2P软件的技术:
1.NAT穿越
2.UDP可靠传输
3.分块调度策略
...
http://hr.baidu.com/www/job/jobDe...
-
以TCP为写的服务器和客户端程序 无法通信
基于面向连接的TCP,写了一个服务器程序和一个客户端程序。服务器负责监听一个端口等待...
-
毕设啊,来不及了,谁做过 OFDMA动态资源分配算法 的 MATLAB仿真??
我们毕设的题目是“OFDMA动态资源分配算法的研究”,我在网上也荡了一...
-
关于UDP包传送的问题
最近在佛山移动做一个项目,这个项目已经过了初验,现在需要终验。但由于一个问题迟迟没有解决,不敢跟客户提终验...
-
udp通信数据接收转发
小弟最近在写流媒体转发服务器程序,从原始服务器发送过来的媒体包,需要1对多的转发给不同的client,在主程序中...