//分析接收到的字符,得到远程主机地址
int GetAddressAndPort( char * str, char *address, int * port)
{
char buf[BUFSIZE], command[512], proto[128], *p;
int j;
sscanf(str,"%s%s%s",command,buf,proto);
p=strstr(buf,HTTP);
//HTTP
if(p)
{
p =strlen(HTTP);
for(int i=0;i< strlen(p);i )
if( *(p i)=='/') break;
*(p i)=0;
strcpy(address,p);
p=strstr(str,HTTP);
for(int j=0;j< i strlen(HTTP);j )
*(p j)=' '; //去掉远程主机名: GET http://www.njust.edu.cn/ HTTP1.1 == > GET / HTTP1.1
*port=80; //缺省的 http 端口
}
else
{//FTP, 不支持, 下面的代码可以省略.
p=strstr(buf,FTP);
if(!p) return 0;
p =strlen(FTP);
for(int i=0;i< strlen(p);i )
if( *(p i)=='/') break; //Get The Remote Host
*(p i)=0;
for(j=0;j< strlen(p);j )
if(*(p j)==':')
{*port=atoi(p j 1); //Get The Port
*(p j)=0;
}
else *port=21;
strcpy(address,p);
p=strstr(str,FTP);
for(j=0;j< i strlen(FTP);j )
*(p j)=' ';
}
return 1;
}
// 取到本地的数据,发往远程主机
UINT UserToProxyThread(void *pParam)
{
char Buffer[BUFSIZE];
int Len;
sockaddr_in from;
SOCKET msg_socket;
int fromlen,retval;
SocketPair SPair;
ProxyParam ProxyP;
CWinThread *pChildThread;
fromlen=sizeof(from);
msg_socket=accept(gListen_Socket,(struct sockaddr*)