用影音传送带测试通过的代理服务器,用这段程序却测试不通过,但又不是所有的都不行,请各位给看看~~~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;
}
{
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;
}
解决方案 »
- 做个大华硬盘录像机的流媒体转发服务器,tcp转发,用什么模型比较好,现在是设计阶段
- 这一小段代码中,为什么一定要弹出对话框 才正确??
- 如何替换CString里面的空格串
- 请教:怎么把 位图画到 (30,40) ,用 win api 函数怎么实现?谢谢!
- 求教熟悉RichEditCtrl的请进。
- 一个小问题。 关于子对话框的。
- VC操作word的range.delete()的两个参数
- 哪位知道大侠知道讲list control控件得网站,请求告知!不胜感激!
- FORMVIEW 中的控件问题??急急急!!!!
- 帮帮忙:给我几个关于VC的好的网站?
- 散分★★★★★2004年度最感人真情故事评选★★★★★散分
- 关于类似于cuteftp界面的问题
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;
}