My the client point have a problem.But where don't I take place?
- From: "Z.Smith" <zhchyg@xxxxxxx>
- Date: Thu, 15 Sep 2005 12:52:20 +0800
client -----> proxy ---------------> server
1.1.51.227:8000 1.1.51.227:1080 1.1.51.227:8001
SOCKET tcp,udp;
sockaddr_in clientaddr,proxyaddr,proxyaddr1,remoteaddr;
char m_sz_udp_srv[1024];
u_short m_n_port;
char buf[1024];
CString str;
udp = socket(AF_INET,SOCK_DGRAM,0);
tcp = socket(AF_INET,SOCK_STREAM,0);
clientaddr.sin_family = AF_INET;
clientaddr.sin_addr.s_addr= inet_addr("1.1.51.227");
clientaddr.sin_port = htons(8000);
bind(udp,(sockaddr*)&clientaddr,sizeof(clientaddr));
proxyaddr.sin_family = AF_INET;
proxyaddr.sin_addr.s_addr= inet_addr("1.1.51.227");
proxyaddr.sin_port = htons(1080);
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr= inet_addr("1.1.51.227");
remoteaddr.sin_port = htons(8001);
if(connect(tcp,(sockaddr*)&proxyaddr,sizeof(proxyaddr))==SOCKET_ERROR)
{
closesocket(tcp);
return;
}
memset(buf,0,1024);
buf[0]=0x05;
buf[1]=0x02;
buf[2]=0x00;
buf[3]=0x02;
send(tcp,buf,4,0);
memset(buf,0,1024);
if(recv(tcp,buf,1024,0)==SOCKET_ERROR)
{
closesocket(tcp);
return;
}
if(buf[0]==0x05 && buf[1]==0x02)
{
AfxMessageBox("need username and password!"); file://My proxy server not
need
}
else if(buf[0]!=0x05 || buf[1]!=0x00)
{
closesocket(tcp);
return;
}
memset(buf,0,1024);
buf[0]=0x05;
buf[1]=0x03;
buf[2]=0x00;
buf[3]=0x01;
*((int *)(&buf[4])) = clientaddr.sin_addr.s_addr;
*((short *)(&(buf[8]))) = (short)clientaddr.sin_port;
send(tcp,buf,10,0);
memset(buf,0,1024);
if(recv(tcp,buf,1024,0)==SOCKET_ERROR)
{
closesocket(tcp);
return;
}
if(buf[0]!=0x05 || buf[1]!=0x00)
{
closesocket(tcp);
return;
}
if(buf[3]==0x01)
{
file://can come to here
int n_ip = *((int *)&buf[4]);
in_addr in;
in.S_un.S_addr = n_ip;
memset((void *)m_sz_udp_srv,0,sizeof(m_sz_udp_srv));
strcpy(m_sz_udp_srv,inet_ntoa(in));
m_n_port = htons(*((unsigned short *)&(buf[8])));
}
else
{
closesocket(tcp);
return;
}
file://sned a UDP data packet
memset(buf,0,1024);
buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x01;
buf[4]=(char)remoteaddr.sin_addr.S_un.S_un_b.s_b1;
buf[5]=(char)remoteaddr.sin_addr.S_un.S_un_b.s_b2;
buf[6]=(char)remoteaddr.sin_addr.S_un.S_un_b.s_b3;
buf[7]=(char)remoteaddr.sin_addr.S_un.S_un_b.s_b4;
*((SHORT*)(&(buf[8])))=remoteaddr.sin_port;
buf[10] = 'A';
proxyaddr1.sin_family = AF_INET;
proxyaddr1.sin_addr.s_addr = inet_addr(m_sz_udp_srv);
proxyaddr1.sin_port = htons(m_n_port);
int addr_len;
addr_len=sizeof(struct sockaddr);
int returndatalen=sendto(udp,buf,1024,0,(struct sockaddr
*)&proxyaddr1,addr_len);
DWORD err = ::WSAGetLastError(); file://no error
NetPacket pack;
memset(&pack,0,sizeof(pack));
returndatalen = recvfrom(udp,buf,1024,0,(struct sockaddr
*)&proxyaddr1,&addr_len);
err = ::WSAGetLastError(); file://no error
if(err == 0)
MessageBox(buf); file://display a dialog with empty char*
else{
str.Format("%d",err);
MessageBox(str);
}
closesocket(tcp);
closesocket(udp);
.
- Follow-Ups:
- Re: My the client point have a problem.But where don't I take place?
- From: Dave Lowther
- Re: My the client point have a problem.But where don't I take place?
- From: Waleri Todorov
- Re: My the client point have a problem.But where don't I take place?
- Prev by Date: Re: How to WSADuplicateSocket for a process under a different Wind
- Next by Date: Re: Bind to specify sending NIC on multi-homed computer
- Previous by thread: Signature (MD5)
- Next by thread: Re: My the client point have a problem.But where don't I take place?
- Index(es):
Relevant Pages
|