代理服务器测试失败?
用影音传送带测试通过的代理服务器,用这段程序却测试不通过,但又不是所有的都不行,请各位给看看~~~
BOOL CheckProxy(CString IP,int Port)
{
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
int iResult;
long lResult;
char strSubAddr[100], strBuffer[1000];
CString strtmp;
lResult = WSAStartup(0x0101,&ws);
s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
addr.sin_family = AF_INET;
addr.sin_port = htons(Port);
addr.sin_addr.s_addr = inet_addr(IP);
CString out;
out.Format("%s:%d ",IP,Port);
cout << (LPCTSTR)out;
DWORD on=1,off=0;
int TimeOut=8000;
if(::setsockopt(s,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
cout << (LPCTSTR)"连接超时\n" << endl;
return FALSE;
}
TimeOut=8000;
if(::setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
cout << (LPCTSTR)"连接超时\n" << endl;
return FALSE;
}
int ret=ioctlsocket(s,FIONBIO,(unsigned long *)&on);
if(ret==SOCKET_ERROR)
{
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
iResult=connect(s,(struct sockaddr *)&addr, sizeof(addr));
struct timeval timeout ;
fd_set w;
FD_ZERO(&w);
FD_SET(s, &w);
timeout.tv_sec = 3; //连接超时3秒
timeout.tv_usec =0;
switch (select(0, 0, &w, 0, &timeout))
{
case -1:
WSACleanup();
cout << (LPCTSTR)"连接超时\n" << endl;
return FALSE;
case 0:
WSACleanup();
cout << (LPCTSTR)"连接超时\n" << endl;
return FALSE;
default:
if (FD_ISSET(s,&w))
{
//连接成功
}
}
unsigned long ul1= 0 ;
ret = ioctlsocket(s, FIONBIO, (unsigned long*)&off);
if(ret==SOCKET_ERROR){
WSACleanup();
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
strcpy(strSubAddr, "GET http://www.163.com/ ");
strcat(strSubAddr,"HTTP/1.0 HOST:www.163.com \r\n ");
strcat(strSubAddr,"User-Agent: Mozilla/4.0");
strcat(strSubAddr," \r\n\r\n");
iResult=send(s,strSubAddr,strlen(strSubAddr),0);
strset(strBuffer,' ');
int d=sizeof(addr);
accept(s,(struct sockaddr *)&addr, &d);
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
int result = 0;
result = strstr(strBuffer,"HTTP/1.0 200 OK")-strBuffer + 1;
if(SOCKET_ERROR == iResult)
{
// 连接失败
WSACleanup();
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
else if(result==1)
{
cout << (LPCTSTR)"连接正常\n" << endl;
}
else
{
// 连接失败
WSACleanup();
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
return TRUE;
}
问题点数:40、回复次数:6Top
1 楼flyingakain(夜猫儿)回复于 2005-01-21 01:24:55 得分 0
upTop
2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-21 13:06:49 得分 5
网络连接?Top
3 楼gdy119(夜风微凉)回复于 2005-01-21 14:32:30 得分 35
listen(listensocket,5);
memset(strBuffer,0,1000);
int d=sizeof(addr);
// 为什么有accept()? listen()调用了吗?
accept(s,(struct sockaddr *)&addr, &d);
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
int result = 0;
result = strstr(strBuffer,"HTTP/1.0 200 OK")-strBuffer + 1;
// 这里返回的是1吗?不一定哦!
if(SOCKET_ERROR == iResult)
{
// 连接失败
WSACleanup();
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
else if(result==1)
{
cout << (LPCTSTR)"连接正常\n" << endl;
}
else
{
// 连接失败
WSACleanup();
cout << (LPCTSTR)"连接失败\n" << endl;
return FALSE;
}
return TRUE;
}
Top
4 楼flyingakain(夜猫儿)回复于 2005-01-21 14:59:55 得分 0
accept 忘了弄掉了,哈哈
不过测试不通过的现象是,返回http 400错误Top
5 楼flyingakain(夜猫儿)回复于 2005-01-21 15:00:03 得分 0
accept 忘了弄掉了,哈哈
不过测试不通过的现象是,返回http 400错误Top
6 楼flyingakain(夜猫儿)回复于 2005-01-25 15:30:28 得分 0
upTop




