一:前言
二:Socket5客户端基于Tcp协议的实现
该程序的原理如下:
你的客户端程序(发送数据)------>Socket5代理服务器(中转数据)----->远程目的主机(显示数据).所以你必须拥有一个Socket5代理服务器软件,强烈推荐朱尧坤先生写的CCproxy,下载地址http://www.youngzsoft.com/.
新建一个工程,放上四个Label,五个Edit,一个ServerSock控件,一个按钮和一个Memo控件.在uses里添加Winsock.窗口初始化的时候初始化各个控件.
procedure TForm1.FormCreate(Sender: TObject);
var
TempWSAData:TWSAData;
begin
Label1.Caption:='Socks5代理服务器地址';
Edit1.Text:='127.0.0.1';
Label2.Caption:='Socks5代理服务器端口';
Edit2.Text:='1080';
Label3.Caption:='远程服务器地址';
Edit3.Text:='127.0.0.1';
Label4.Caption:='远程服务器端口';
Edit4.Text:='9999';
Edit5.Text:='输入要发送的字符';
Button1.Caption:='测试';
ServerSocket1.Port:=9999;
ServerSocket1.Active:=True;
Memo1.Lines.Clear;
//初始化Winsock
if (WSAStartup(MAKEWORD(2,0),TempWSAData)<>0) then
begin
Application.MessageBox('程序初始化失败!',Pchar(Application.Title),MB_ICONINFORMATION);
Application.Terminate;
end
else
Memo1.Lines.Add('程序初始化成功!');
end;
//点Button1的时候通过代理服务器发送数据
procedure TForm1.Button1Click(Sender: TObject);
var
MyClientSock:TSocket;
Socket5Proxy:TSockAddr;
TargetSock:TSockAddr;
MySocketBuf:array[0..256]of byte;
SendStrBuf:array[0..1024*16] of char;
PcharSocketAddr:PChar;
Re,i:integer;
begin
Memo1.Lines.Add('----------------------------');
//1:创建Socket
MyClientSock:=socket(AF_INET,SOCK_STREAM,0);
if(MyClientSock=INVALID_SOCKET) then
begin
Memo1.Lines.Add('创建Socket失败!');
Exit;
end
else
Memo1.Lines.Add('成功创建socket.');
//2:连接Socket5代理服务器
ZeroMemory(@Socket5Proxy,sizeof(Socket5Proxy));
Socket5Proxy.sin_family := AF_INET;
GetMem(PcharSocketAddr,Length(Edit1.Text)+1);
ZeroMemory(PcharSocketAddr,Length(Edit1.Text)+1);
StrPCopy(PcharSocketAddr,Edit1.Text);
Socket5Proxy.sin_addr.S_addr :=inet_addr(PcharSocketAddr);
FreeMem(PcharSocketAddr);
Socket5Proxy.sin_port := htons(StrToInt(Edit2.Text));
Re:=connect(MyClientSock,Socket5Proxy,sizeof(Socket5Proxy));
if