我用socket 发送get 请求时,发现执行的速度有点慢,比如一分钟才执行几十次请求后来我改用多线程,发现情况并没有改善,用了五个线程,一分钟还是只能执行几十次geT 请求
有什么方法可以一分钟执行几百次这样的请求,谢谢了
代码如下
#include <iostream>
#include <string>
#include <vector>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[])
{
char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR)
{
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
if (cli_sock==INVALID_SOCKET)
return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);
if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
{
return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.0\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz),0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[50000+1]={0};
int nTotal=0;
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer+nTotal,50000,0);
if (retval<=0)
{
break;
}
nTotal+=retval;
}
closesocket(cli_sock);
buffer[nTotal]=0;
printf("%s\n",buffer);
system("pause");
return 0;
}
有什么方法可以一分钟执行几百次这样的请求,谢谢了
代码如下
#include <iostream>
#include <string>
#include <vector>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[])
{
char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR)
{
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
if (cli_sock==INVALID_SOCKET)
return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);
if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
{
return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.0\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz),0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[50000+1]={0};
int nTotal=0;
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer+nTotal,50000,0);
if (retval<=0)
{
break;
}
nTotal+=retval;
}
closesocket(cli_sock);
buffer[nTotal]=0;
printf("%s\n",buffer);
system("pause");
return 0;
}
客户端一分钟发几十次,应该可以了吧。