**这是客户端连接代理时候代理处理的代码//**
void CListenSocket::OnAccept(int nErrorCode) 
{  char buf[0x1000];  
char codebuf[0x1000];  
int retval=0;  
unsigned int bytesend=0;  
//MMSG msg;  
const char mirver[]="<mir152>";  
const char fjdshfa[]="<C7ACA755D8C89168D6FCB949EA62CC1B32B03AA77443C73FFCA7533C5D1A6DD740E8>";  
const char answer[]= "<C7ACA755D8C89168D6FCB949EA62CC1B32B03AA77443C73FFCA7533C5D1A6DD740E824>";  
const char pass[]="<pass>";  
CString str;  
CString account;  
CString password;  
CSocket sktClient;  
CSocket sktServer;  
if(Accept(sktClient))  
{    retval=sktClient.Receive(buf,0x1000);    
buf[retval]=(char)0;    
     if(strcmp(buf,mirver)!=0)    
{      sktClient.Close();      
return;    
}          
sktClient.Send(fjdshfa,strlen(fjdshfa));    
retval=sktClient.Receive(buf,0x1000);    
buf[retval]=(char)0;          
if(strcmp(buf,answer)!=0)    
{      sktClient.Close();      
return;    
}          
sktClient.Send(pass,strlen(pass));    
retval=sktClient.Receive(buf,0x1000);    
buf[retval]=(char)0;    
if(buf[retval-1]=='>')      
buf[retval-1]=(char)0;    
DecodeGate(&buf[1],codebuf);    
sktServer.Create();    
if(sktServer.Connect(m_ServerIp,7000)==0)    
{      AfxGetMainWnd()->MessageBox("连接服务器失败",m_ServerIp);      sktClient.Close();      
return;    
}    
bytesend=0;    
do    
{      
retval=sktServer.Send(codebuf+bytesend,strlen(codebuf)-bytesend);      
if (retval==SOCKET_ERROR)      
                 {        
                 sktClient.Close();        
sktServer.Close();        
return;      
            }      
       bytesend+=retval;    
          }
while(bytesend < strlen(codebuf));        
retval=sktServer.Receive(buf,0x1000);    
buf[retval]=(char)0;    
ZeroMemory(codebuf,0x1000);    
EncodeGate(buf,codebuf);    
sprintf(buf,"<%s>",codebuf);    
sktClient.Send(buf,strlen(buf));    
retval=sktClient.Receive(buf,0x1000);    
buf[retval]=(char)0;    
if(buf[retval-1]=='>')      
buf[retval-1]=(char)0;    
DecodeGate(&buf[1],codebuf);    
bytesend=0;    
do    {  
retval=sktServer.Send(codebuf+bytesend,strlen(codebuf)-bytesend);      
if(retval==SOCKET_ERROR)      
{        sktClient.Close();        
sktServer.Close();        
return;      }
     bytesend+=retval;  
 }
while(bytesend < strlen(codebuf));    
retval=sktServer.Receive(buf,0x1000);    
buf[retval]=(char)0;    
ZeroMemory(codebuf,0x1000);    
EncodeGate(buf,codebuf);    
sprintf(buf,"<%s>",codebuf);    
sktClient.Send(buf,strlen(buf));  }  
sktClient.Close();  
sktServer.Close();  
CSocket::OnAccept(nErrorCode);}//****************************************************  

解决方案 »

  1.   

    看了就头疼找ARI了,他最在行的:)http://lysoft.7u7.net
      

  2.   

    procedure CListenSocket.OnAccept(nErrorCode:integer);
    const BufSize=$1000;
    type
        BufType=Array[0..BufSize-1] of Char;
    var
      buf,codebuf:BufType;
      retval:integer;
      bytesend:uint;
    //MMSG msg;
    const mirveruf:PChar:='<mir152>';
    const fjdshfa:PChar:='<C7ACA755D8C89168D6FCB949EA62CC1B32B03AA77443C73FFCA7533C5D1A6DD740E8>';  
    const answer:PChar:='<C7ACA755D8C89168D6FCB949EA62CC1B32B03AA77443C73FFCA7533C5D1A6DD740E824>';  
    const pass:PChar:='<pass>';  
    str,account,password:String;  
     sktServer,sktClient:CSocket;  
    begin
      if(Accept(sktClient)) then  
      begin
          retval:=sktClient.Receive(buf,$1000);    
          buf[retval]:=#0;    
          if(strocmp(buf,mirver)<>0)  then
          begin   
            sktClient.Close();      
            exit;    
          end;        
         sktClient.Send(fjdshfa,strlen(fjdshfa));    
         retval:=sktClient.Receive(buf,$1000);
         buf[retval]:=#0;          
         if(strocmp(buf,answer)<>0)  then
         begin   
            sktClient.Close();      
            exit;    
         end;        
         sktClient.Send(pass,strlen(pass));    
         retval:=sktClient.Receive(buf,$1000);    
         buf[retval]:=#0;
         if(buf[retval-1]='>') then
            buf[retval-1]:=#0;    
         DecodeGate(@buf[1],codebuf);    
         sktServer.Create();    
         if(sktServer.Connect(m_ServerIp,7000)=0)   then
         begin  
               MessageBox(0,"连接服务器失败",m_ServerIp,mbok); 
               sktClient.Close();      
               exit;
         end;
         bytesend=0;    
         repeat    
           retval:=sktServer.Send(codebuf+bytesend,strlen(codebuf)-bytesend);      
           if (retval=SOCKET_ERROR)  then    
           begin        
               sktClient.Close();        
               sktServer.Close();        
               exit;
           end;
           inc(bytesend,retval);    
        until (bytesend >= strlen(codebuf));        
         retval:=sktServer.Receive(buf,$1000);
         buf[retval]:=#0;
         ZeroMemory(@codebuf,$1000);
         EncodeGate(buf,codebuf);
         StrFmt(buf,'<%s>',[codebuf]);
         sktClient.Send(buf,strlen(buf));
         retval:=sktClient.Receive(buf,0x1000);
         buf[retval]:=#0;
         if(buf[retval-1]='>') then
            buf[retval-1]:=#0;
         DecodeGate(@buf[1],codebuf);
         bytesend:=0;
         repeat
           if (retval=SOCKET_ERROR)  then    
             begin
                 sktClient.Close();
                 sktServer.Close();
                 exit;
             end;
            inc(bytesend,retval);
         until(bytesend >= strlen(codebuf));
         retval:=sktServer.Receive(buf,$1000);
         buf[retval]:=#0;
         ZeroMemory(@codebuf,$1000);
         EncodeGate(buf,codebuf);
         StrFmt(buf,'<%s>',[codebuf]);
         sktClient.Send(buf,strlen(buf));
      end;
      sktClient.Close();
      sktServer.Close();
    end;
    // 大致如此,代码好多可以合并优化