精华内容
下载资源
问答
  • java实现代理服务器
    万次阅读
    2017-03-14 01:23:36

    前束

    本篇博客没有给出一个完善的技术解决方案,使用java搭建代理服务器是处理本人想要实现主备切换的broker而产生的想法,由于能力,时间和精力的限制,目前只能将想法的大致内容实践一下,这里只是分享一些这两天在这上面做出的一些探索,以免其他人重蹈覆辙。

    简述

    需求简述为通过JAVA实现一个代理服务器,客户端的Http请求全部指向代理服务器,代理服务器基于一定的策略将请求转发给后台服务器,(这里的策略就比较核心,能够实现很多特殊的需求,比如我想实现的主备切换的功能,通过添加主机检测模块,如果主机检测模块检测到主服务器down了,那么程序能够顺利的迁移到备用服务器上)。

    技术准备

    Http Request和Response的基础知识
    java socket/Serversocket 类的使用技巧

    问题分析

    问题可以简化为
    1代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机
    2代理服务主机将目标主机的回应直接转发给客户机。

    那么
    代理服务主机可以通过socket直接获取客户机发送到本机指定端口的数据报文,那么通过分析内容可以得到客户机想要发送给目标主机的信息

    代理服务主机可以通过httpRequest的方式再次重新请求,将原来请求中的内容转发给目标主机,之后将目标主机的回应组织成Http Response的形式转发给客户机。

    Demo

    代码中只演示的代理服务器中的通信过程,中间的源信息的分析 以及返回值得构造还没有做,另外还存在多线程控制等问题,建议参考者将精力花在解决以上问题上面。

    import java.net.* ;
    import java.io.* ;
    class ActionSocket extends Thread{
        private Socket socket = null ;
        public ActionSocket(Socket s){
            this.socket = s ;
        }
        public void run(){
            try{
                this.action() ;
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        public void action() throws Exception {
            if (this.socket == null){
                return ;
            }
            InputStream cis = this.socket.getInputStream();
    
            URL url = new URL("http://www.baidu.com");
            HttpURLConnection action = (HttpURLConnection) url.openConnection();
            InputStream sis =action.getInputStream();
            OutputStream cos = socket.getOutputStream();
            int length;
            byte bytes[] = new byte[1024];
    
            while(true){
                try {
                    if ((length = sis.read(bytes)) > 0) {
                        cos.write(bytes, 0, length);//将http请求头写到目标主机
                        System.out.println(new String(bytes));
                        cos.flush();
                    } else if (length < 0)
                    break;
                } catch (Exception e) {
                }
            }
            socket.close();
            cis.close();
        }
    }
    public class SocketServer{
        public static void main(String args[])throws Exception{
            ServerSocket server  = new ServerSocket(8888);
            while(true){
                Socket socket = server.accept();
                ActionSocket ap = new ActionSocket(socket);
                ap.start();
            }
        }
    }
    

    参考

    http://www.fullstackdevel.com/computer-tec/network/731.html
    http://stackoverflow.com/questions/6876266/java-net-connectexception-connection-refused
    http://www.freebuf.com/articles/web/21832.html

    更多相关内容
  • 代理服务器的作用,大家是有目共睹的,确实给我们带来了很大的方便,Java如何实现代理服务器?   首先,这个需求可以简化为: 1、代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机; ...

    代理服务器的作用,大家是有目共睹的,确实给我们带来了很大的方便,Java如何实现代理服务器?
      在这里插入图片描述

    首先,这个需求可以简化为:

    1、代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机;

    2、代理服务主机将目标主机的回应直接转发给客户机。

    代理服务主机可以通过socket直接获取客户机发送到本机指定端口的数据报文,那么通过分析内容可以得到客户机想要发送给目标主机的信息,代理服务主机可以通过socket的方式再次重新请求,将原来请求中的内容转发给目标主机,之后将目标主机的回应转发给客户机。

    对于Java SE项目来说,有两者方式来实现:

    1、采用原生的Java socket 编程。(存在多线程问题…)

    2、采用第三方的网络应用框架,比如:mina、netty等。(开发简单,稳定可靠)

    对于Java WEB项目来说,也有两者方式来实现:

    1、采用上面的Java SE方案。

    2、HTTP代理,拦截客户端的请求,并采用Http协议发送GET/POST请求给目标服务器。

    展开全文
  • Java搭建文件服务器

    万次阅读 2017-12-01 17:54:33
    从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。 首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的...

    技术选型:Java、maven、nginx、tomcat、window

    从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。

    首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的技术都不会体现,如果你需要可以加我的群联系我。

    使用maven是为了方便部署,这里增加一个知识点热部署,直接上pom.xml代码

    [html]  view plain  copy
    1.    
    2.  <dependencies>  
    3.          <dependency>  
    4.         <groupId>javax.servlet</groupId>  
    5.         <artifactId>javax.servlet-api</artifactId>  
    6.         <version>${servlet-version}</version>  
    7.         <scope>provided</scope>  
    8.     </dependency>  
    9.      <!-- JSP视图所需jar -->  
    10.        <dependency>  
    11.         <groupId>jstl</groupId>  
    12.         <artifactId>jstl</artifactId>  
    13.         <version>${jstl-version}</version>  
    14.     </dependency>  
    15.     <dependency>  
    16.         <groupId>taglibs</groupId>  
    17.         <artifactId>standard</artifactId>  
    18.         <version>${taglibs-version}</version>  
    19.     </dependency>  
    20.     <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->  
    21.     <dependency>  
    22.         <groupId>commons-fileupload</groupId>  
    23.         <artifactId>commons-fileupload</artifactId>  
    24.         <version>${commons-fileupload-version}</version>  
    25.     </dependency>  
    26.       
    27.  </dependencies>  
    28.     <build>  
    29.    <finalName>zwfilesys</finalName>  
    30.     <plugins>  
    31.         <plugin>  
    32.             <groupId>org.apache.maven.plugins</groupId>  
    33.             <artifactId>maven-compiler-plugin</artifactId>  
    34.             <configuration>  
    35.                 <source>${java-version}</source>  
    36.                 <target>${java-version}</target>  
    37.                 <!-- true:跳过测试 -->  
    38.                 <skip>true</skip>  
    39.                 <encoding>UTF-8</encoding>  
    40.             </configuration>  
    41.         </plugin>  
    42.         <plugin>  
    43.             <groupId>org.apache.maven.plugins</groupId>  
    44.             <artifactId>maven-resources-plugin</artifactId>  
    45.             <configuration>  
    46.                 <encoding>UTF-8</encoding>  
    47.             </configuration>  
    48.         </plugin>  
    49.         <plugin>  
    50.             <groupId>org.apache.tomcat.maven</groupId>  
    51.             <artifactId>tomcat7-maven-plugin</artifactId>  
    52.             <version>2.2</version>  
    53.             <!-- <configuration>  
    54.                 <path>/</path>  
    55.                 <charset>UTF-8</charset>  
    56.                 <port>80</port>  
    57.                 <uriEncoding>UTF-8</uriEncoding>  
    58.             </configuration> -->  
    59.                 <!-- 热部署 -->  
    60.              <configuration>    
    61.                 <url>http://localhost:8080/manager/text</url>    
    62.                 <username>admin</username>    
    63.                 <password>admin</password>    
    64.                 <server>tomcat</server>    
    65.                 <path>/</path>    
    66.             </configuration>  
    67.         </plugin>  
    68.           
    69.            
    70.     </plugins>  
    71.     <resources>  
    72.         <resource>  
    73.             <directory>src/main/java</directory>  
    74.             <includes>  
    75.                 <include>**/*.xml</include>  
    76.                 <include>**/*.js</include>  
    77.             </includes>  
    78.         </resource>  
    79.         <resource>  
    80.             <directory>src/main/resources</directory>  
    81.         </resource>  
    82.     </resources>  
    83. </build>  

    是用热部署需要先开一个tomcat ,需要配置下tomcat的权限 tomcat-users.xml

    <role rolename="admin" />
    <role rolename="manager" />
    <role rolename="manager-gui" />
    <role rolename="manager-script" />
    <user username="admin" password="admin" roles="admin,manager,manager-gui,manager-script" />

    然后使用maven命令:

     tomcat7:redeploy 
    就可以进行热部署了(要先启动tomcat)
    为了达到文件资源与项目分离,所以上传文件的时候是指定的绝对路径,
    创建servlet类(简单的上传)
    [java]  view plain  copy
    1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    2.     PrintWriter writer = response.getWriter();  
    3.     // 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全    
    4.        String path = DateUtils.format(new Date(), "yyyyMMdd") + "/";  
    5.        File file = new File(Fina.localPath+path);    
    6.        // 判断上传文件的保存目录是否存在    
    7.        if (!file.exists() && !file.isDirectory()) {    
    8.            //目录不存在,需要创建");    
    9.            file.mkdir();// 创建目录    
    10.        }    
    11.        try {    
    12.            // 使用Apache文件上传组件处理文件上传步骤:    
    13.            // 1、创建一个DiskFileItemFactory工厂    
    14.            DiskFileItemFactory factory = new DiskFileItemFactory();    
    15.            // 2、创建一个文件上传解析器    
    16.            ServletFileUpload upload = new ServletFileUpload(factory);    
    17.            // 解决上传文件名的中文乱码    
    18.            upload.setHeaderEncoding("UTF-8");    
    19.            // 3、判断提交上来的数据是否是上传表单的数据    
    20.            if (!ServletFileUpload.isMultipartContent(request)) {    
    21.                return;    
    22.            }    
    23.            // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项    
    24.            List<FileItem> list = upload.parseRequest(request);       
    25.            String value = null;    
    26.            String filename = null ;    
    27.            for (FileItem item : list) {                    
    28.                // 如果fileitem中封装的是普通输入项的数据    
    29.                if (item.isFormField()) {    
    30.                    // 解决普通输入项的数据的中文乱码问题    
    31.                    value = item.getString("UTF-8");    
    32.                    
    33.                } else {// 如果fileitem中封装的是上传文件    
    34.                        // 得到上传的文件名称,    
    35.                    filename = item.getName();    
    36.                    if (filename == null || filename.trim().equals("")) {    
    37.                        continue;    
    38.                    }    
    39.                    filename = filename.substring(filename.lastIndexOf("\\") + 1);    
    40.                    // 获取item中的上传文件的输入流    
    41.                    InputStream in = item.getInputStream();    
    42.                    // 创建一个文件输出流    
    43.                    FileOutputStream out = new FileOutputStream(Fina.localPath + "\\"+path + filename);    
    44.                    // 创建一个缓冲区    
    45.                    byte buffer[] = new byte[1024];    
    46.                    // 判断输入流中的数据是否已经读完的标识    
    47.                    int len = 0;    
    48.                    // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据    
    49.                    while ((len = in.read(buffer)) > 0) {    
    50.                        // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"+ filename)当中    
    51.                        out.write(buffer, 0, len);    
    52.                    }    
    53.                    // 关闭输入流    
    54.                    in.close();    
    55.                    // 关闭输出流    
    56.                    out.close();    
    57.                    // 删除处理文件上传时生成的临时文件    
    58.                    item.delete();    
    59.                }    
    60.            }  
    61.            writer.print(""+Fina.path+path+filename);  
    62.        } catch (Exception e) {    
    63.            e.printStackTrace();    
    64.        }    
    65.       
    66. }  
    public static String path ="http://192.168.1.156/";
    public static String localPath ="F:/upload/";
    使用到的jar包在pom.xml中有说明,页面就一个简单from表单提交文件
    接下来就是访问资源了,这里使用的nginx1.6.3版本下载window版本修改nginx.conf 配置

    我这里使用的80端口,需要注意端口问题 这样配置完了以后就可以达到项目与资源分离了,就算项目挂了,还是可以访问到资源的,

    不会nginx怎么办
    如果你想只是资源分离,操作不分离的 可以在tomcat中虚拟一个路径,可以直接通过虚拟路径也是可以访问到的,这里资源和代码是分离的,但是操作都需要经过tomcat 没有使用到nginx来代理。
    展开全文
  • Java实现简单HTTP服务器与HTTP代理

    热门讨论 2013-03-11 17:01:03
    Java实现简单HTTP服务器与HTTP代理
  • 在Linux上部署Squid服务搭建一个简单的代理服务器

    简介

    Squid 是一种用来缓冲Internet数据的软件。它接受来自客户端的请求并适当地处理这些请求。简单来说如果想下载一个web页面,客户端请求Squid为它取得这个页面。Squid随之连接到远程服务器并向这个页面发出请求,然后Squid显式地聚集数据到客户端机器同时复制一份,当下一次有人需要同一页面时,Squid可以从磁盘中读到它,就将数据迅即就会传输到客户机上。

    Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。

    服务名称:squid

    主配置文件:/etc/squid/squid.conf

    默认监听端口:3128

    我这里是直接在一台公网服务器上进行安装搭建的,然后再本地主机进行代理测试。

    安装

    可以直接使用yum安装不要考虑依赖性问题。

    yum install squid -y

    配置

    修改主配置文件

    vim /etc/squid/squid.conf

    :set nu

    在59行将deny改成allow,表示允许所有人连接。

    在62行默认是3128端口,我这里改成了60000。

    取消65行的注释,表示缓存条目。

    启动squid服务,查看端口监听情况。

    systemctl start squid

    netstat -tunpl

    验证

    我这里先在谷歌浏览器查看一下 本机当前ip,然后利用的代理插件设置刚刚搭建好的squid服务器的ip:port

    然后使用这条代理规则刷新一下网页

    可以看到本地ip变成了公网的ip。

    这里配置的是一个简单的正向代理服务。

    正向代理就是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定原始服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。


    结语

    已无暇顾及过去,要向前走。

    展开全文
  • 基于Java实现的代理服务器

    热门讨论 2010-07-31 17:35:13
    基于Java实现的代理服务器,实现socks4,socks5协议
  • JAVA写HTTP代理服务器(一)-socket实现

    万次阅读 2017-09-04 16:12:40
    HTTP代理服务器是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障...
  • CentOS7-使用squid搭建http代理服务器

    千次阅读 2021-11-15 14:53:17
    我使用的是CentOS7 版本的服务器其他版本估计也都差不多,可以自己试试 介绍 1.代理proxy: 首先从概念上讲,代理这个词,词语的汉语解释:...那么代理服务器的作用,就是把我们的请求先发送给代理服务器,由代理 服务
  • nginx和ftp搭建图片服务器 一、需要的组件 图片服务器两个服务: Nginx(图片访问): 1、http服务:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。 2、反向代理 实现 负载均衡 ftp...
  • Linux系统java环境(以及Nginx反向代理) 主要安装jdk和Tomcat环境 1.tomcat环境安装 2.jak环境安装以及环境变量配置 两种方式: 第一种:使用yum方式安装jdk 第二种:直接官网下载压缩包进行安装(以下只讲第一种...
  • 快速搭建一个自己的服务器详解(java环境)

    万次阅读 多人点赞 2018-07-19 22:12:51
    服务器的购买 1. 我选择的是阿里云的服务器,学生价9.5元一个月,百度直接搜索阿里云,然后点击右上角登录,推荐大家用支付宝扫码登录,方便快捷。阿里云官网的东西比较多,登录后我找了很久也没有找到学生服务器...
  • node.js搭建代理服务器实现跨域

    千次阅读 2017-04-24 12:39:07
    node.js搭建代理服务器实现跨域前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦...
  • JAVA实现WebSocket服务器

    千次阅读 2021-04-30 16:54:46
    最近做一个物联网相关的项目,需要让服务器主动推送消息给客户端。简单的话可以在客户端进行ajax轮询,但对于服务器来说会有大量的无效请求,客户端一多还容易扑街,于是准备上WebSocket。 环境为Spring Boot。 ...
  • Java开发代理服务器

    千次阅读 2012-08-23 16:35:18
    步骤一:内部的浏览器发送请求给代理服务器。请求的第一行包含了目标URL。步骤二:代理服务器读取该URL,并把请求转发给合适的目标服务器。步骤三:代理服务器接收来自Internet目标机器的应答,把应答转发给合适的...
  • Java实现Socket5代理服务器

    千次阅读 2019-01-24 17:13:43
    Java实现Socket5代理服务器
  • 1.首先搭建一个文件服务器,不管你是本地虚拟机镜像创建的服务器,还是买的云服务器,都适用。 1)先去下载一个tomcat的安装包,如果你下不到没关系,我有。 链接:...
  • 手把手教你搭建Nginx代理服务器,无论是实施岗还是开发岗,Nginx都是你的不二选择 Nginx是个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. Nginx作为一款轻量级的Web代理服务器.其由于内存少,并发能力强,...
  • 现在有一个项目,这个项目的页面、业务、图片分散在3个不同端口的服务中 ...可以通过新建一个新服务器,让前端访问这个新服务器。页面、静态文件以及业务由新服务器分配 对了,我没有服务端的源码
  • 一段时间前,腾讯云推出的轻量应用服务器的活动,性价比较高,我身边就有很多大佬购买了腾讯云轻量应用服务器,今天,博主继续给大家带来腾讯云轻量应用服务器的玩法,很多时候大家连接国外的服务器,会因为线路的...
  • 从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。 首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的...
  • mac命令行配置代理服务器When you configure a proxy server on your Mac, applications will send their network traffic through the proxy server before going to their destination. This may be required by ...
  • 【Linux服务】socket5代理服务器搭建

    千次阅读 2020-05-22 14:15:18
    如果在系统中需要搭建socket代理服务,可以参照如下脚本: 1、将账号密码替换成自己想要的设置 2、将"端口"替换成需要的端口号 3、运行脚本,即可完成安装 4、可通过netstat -lntp | grep ss5命令查看端口是否...
  • java通过sockt实现代理服务器

    千次阅读 2018-01-10 16:41:38
    HTTP 代理有分两种: ...这种代理扮演的是「中间人」角色,对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文。Tunneling TCP bas
  • 使用Docker搭建自用代理网络

    千次阅读 2021-06-24 17:20:04
    1、安装Docker并启动 sudo wget -qO- https://get.docker.com/ | sh sudo service docker start 2、下载VPN镜像 sudo docker pull hwdsl2/ipsec-vpn-server 3、创建配置文件 ...--name ipsec-
  • 文章目录简介netty中的websocketwebsocket的版本...通过Websocket我们可以实现客户端和服务器端的即时通讯,免除了客户端多次轮循带来的性能损耗。 既然websocket这么优秀,那么怎么在netty中使用websocket呢?
  • 基于阿里云CentOS8搭建远程服务器

    千次阅读 2021-11-22 20:34:01
    基于阿里云CentOS-8+宝塔面板搭建远程服务器—0基础入门篇 星光不问赶路人,时间不负有心人,最近做课程设计就是要用到服务器,自己花了一天时间去了解以及部署。记录一下。这篇文章一轻量服务器为例,云服务器...
  • 因为freeradius是c写的,而需求是需要java搭建radius服务器,jradius正好是java写的,在freeradius3.0以下把jradius的模块映射出去,这样就可以用java代码来操作java端的服务器。 本资源好几个人搭建1个周,过程很...
  • MQTT通信架构 搭建MQTT服务器

    千次阅读 2022-04-03 11:11:10
    MQ 遥测传输 (MQTT) 是基于代理的发布/订阅的消息传输协议。 传输屏蔽消息内容 TCP/IP有连接传输(可靠) 小型传输,开销很小,降低网络流量 使用lastwill等机制告知客户端异常中断(本次实验用不到) 三种消息发布...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,716
精华内容 18,286
关键字:

java搭建代理服务器

java 订阅