欢迎来到天天文库
浏览记录
ID:3914261
大小:273.66 KB
页数:5页
时间:2017-11-25
《java开发代理服务器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实用第一智慧密集Java开发代理服务器江洪摘要:用Java语言成功开发了一个代理服务器程序。支持常见的HTTP代理和Sock4、Sock5代理,可以用于局域网中,通过代理服务器连接Internet,以实现常用的Internet操作。关键词:Java;代理服务器;HTTP代理;Sock4代理;Sock5代理代理服务器的主要功能是代理网络用户取得网络信息,它CONNECT命令用于与Internet上的某IP地址和端口号建是连接局域网和因特网的中转站。正是依靠代理服务器的工立TCP连接。作,客户机才能正
2、常地访问Internet。HTTP代理工作模式如下:出于安全性和便利性等方面的原因,局域网程序要访问(1)客户端连接HTTP代理服务器服务端口。Internet,通常不能或者不方便直接连接Internet,而要先连接(2)客户端发送HTTP命令请求,其中包括域名(IP地址)、端局域网中的某台代理服务器,将请求发给代理服务器,代理服口号等信息。务器收到局域网的请求后,会试图连接Internet上的相应的IP(3)代理服务器根据客户端发来的命令,从中解析出要连接地址和端口,并将客户端请求数据发送到In
3、ternet上;如果In-的IP地址(域名)、端口号,并建立因特网TCP套接字。ternet上有返回的数据,代理服务器再将数据返回给发出请求(4)循环读出局域网套接字中数据,写入因特网套接字中。的局域网客户端。通过代理服务器转发客户端数据的功能,实(5)循环读因特网套接字中数据,写入局域网套接字中。现了局域网用户访问Internet的需求。1.2Sock4代理一般Internet上常见的代理服务器是HTTP代理、Sock4代Sock4代理工作模式如下:理、Sock5代理3种。大部分客户端程序都支持
4、上述三种代理。(1)客户端连接Sock4代理服务器的服务端口。HTTP代理一般用于浏览网页,同时也有可能用于其他操作。(2)客户端发送命令41+目的端口号(2字节的16进制表Sock4和Sock5代理统称为Socks代理,通常用于各种使用示)+目的IP地址或域名(如字节4、5、6均为0,而字节7不为TCP/IP协议的程序。其中Sock4代理只支持TCP数据传送,0,字节8为0,则表示其后是一个域名;否则其后4个字节是16Sock5代理支持TCP和UDP数据传送,同时还支持多种客户进制表示的IP地址
5、)。验证功能。不管哪种代理,都要通过一系列协商会话,确定局(3)代理服务器根据取出的IP地址(域名)、端口号建立因域网和因特网上的IP地址(域名)和端口号,并建立相应的特网TCP套接字。套接字,以后的读写操作就和一般的套接字操作相一致。(4)代理服务器向客户端返回应答00x5a+因特网套接字绑定的IP地址(只取前2字节)+因特网套接字绑定的端口号(21常见代理字节的16进制表示)。1.1HTTP代理(5)循环读客户端套接字,读出数据写入因特网套接字。使用HTTP代理,局域网要访问Internet时
6、,会和代理服(6)循环读因特网套接字,读出数据写入客户端套接字。务器的服务端口建立TCP连接,然后发出诸如GET、POST、1.3Sock5代理CONNECT等请求命令,该命令中包含因特网上的IP地址(域Sock5代理工作模式如下:名),有时还有端口号,如不特别指定端口号,则默认端口号为(1)客户端连接Sock5代理服务器服务端口。80。代理服务器从请求命令中取出要连接的IP地址和端口号,(2)客户端发送命令510,表示要进行SOCK5代理。建立一个TCP套接字连接,把客户端的请求转发到Inter
7、net上,(3)代理服务器返回应答50,表示可以进行代理。如从该套接字中读到Internet返回数据,代理服务器会通过客户(4)客户端发送命令5101+目的地址(4字节的16进制表端套接字把数据返回给客户端,以便客户端程序进行处理。示)+目的端口(2字节16进制表示)。GET命令用于从Internet上获取某个资源。(5)代理服务器根据取出的IP地址、端口号建立因特网套POST命令用于向Internet提交客户数据。接字。2010.918电脑编程技巧与维护PROGRAMLANGUAGE编程语言(6
8、)代理服务器向客户端返回应答5001+因特网套接字绑server=_server;start();定的IP地址(4字节的16进制表示)+因特网套接字绑定的端口}publicvoidrun(){//线程运行函数号(2字节的16进制表示)。Socketconnection;(7)循环读客户端套接字,读出数据写入因特网套接字。while(true){(8)循环读因特网套接字,读出数据写入客户端套接字。try{connection=server.accept();2程序解析SOCKSSer
此文档下载收益归作者所有