`
dannyhz
  • 浏览: 395128 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

手写一个代理服务器 proxy server

阅读更多

package com.base.proxyserver;

import java.io.*;
import java.net.*;

public class SimpleProxyServer {
	
  public static void main(String[] args) throws IOException {
    try {
    //jdbc:oracle:thin:@10.1.114.205:1753:O05GCE0	
      String host = "10.1.114.205";//"qdc05133-scan.it.statestr.com";
      int remoteport = 1753;
      int localport = 1789;
      // Print a start-up message
      System.out.println("Starting proxy for " + host + ":" + remoteport
          + " on port " + localport);
      // And start running the server
      runServer(host, remoteport, localport); // never returns
    } catch (Exception e) {
      System.err.println(e);
    }
  }

  /**
   * runs a single-threaded proxy server on
   * the specified local port. It never returns.
   */
  public static void runServer(String host, int remoteport, int localport)
      throws IOException {
    // Create a ServerSocket to listen for connections with
    ServerSocket ss = new ServerSocket(localport);

    final byte[] request = new byte[1024];
    byte[] reply = new byte[4096];

    while (true) {
      Socket client = null, server = null;
      try {
        // Wait for a connection on the local port
        client = ss.accept();

        final InputStream streamFromClient = client.getInputStream();
        
        final OutputStream streamToClient = client.getOutputStream();

        // Make a connection to the real server.
        // If we cannot connect to the server, send an error to the
        // client, disconnect, and continue waiting for connections.
        try {
          server = new Socket(host, remoteport);
        } catch (IOException e) {
          PrintWriter out = new PrintWriter(streamToClient);
          out.print("Proxy server cannot connect to " + host + ":"
              + remoteport + ":\n" + e + "\n");
          out.flush();
          client.close();
          continue;
        }

        // Get server streams.
        final InputStream streamFromServer = server.getInputStream();
        final OutputStream streamToServer = server.getOutputStream();

        // a thread to read the client's requests and pass them
        // to the server. A separate thread for asynchronous.
        Thread t = new Thread() {
          public void run() {
            int bytesRead;
            try {
              while ((bytesRead = streamFromClient.read(request)) != -1) {
            	  
            	  
            	  System.out.println("str = " + new String(request, "utf-8"));
            	  
                streamToServer.write(request, 0, bytesRead);
                streamToServer.flush();
              }
            } catch (IOException e) {
            }

            // the client closed the connection to us, so close our
            // connection to the server.
            try {
              streamToServer.close();
            } catch (IOException e) {
            }
          }
        };

        // Start the client-to-server request thread running
        t.start();

        // Read the server's responses
        // and pass them back to the client.
        int bytesRead;
        try {
          while ((bytesRead = streamFromServer.read(reply)) != -1) {
            streamToClient.write(reply, 0, bytesRead);
            System.out.println("response = " + new String(reply, "utf-8"));
            streamToClient.flush();
          }
        } catch (IOException e) {
        }

        // The server closed its connection to us, so we close our
        // connection to our client.
        streamToClient.close();
      } catch (IOException e) {
        System.err.println(e);
      } finally {
        try {
          if (server != null)
            server.close();
          if (client != null)
            client.close();
        } catch (IOException e) {
        }
      }
    }
  }
}

分享到:
评论

相关推荐

    Http代理服务器(proxy Server )

    超轻量型 Http proxy Server,用来学习非常不错,实现GET/POST 的 Web 处理,可以帮助我们真正理解服务器程序的本质。

    proxy.rar_delphi Proxy_proxy server_代理 delphi_代理服务器

    用delphi编写设计一款自己的代理服务器软件,实现思路:当前流行的浏览器的系统选项中有一个参数,即“通过代理服务器连接”,经过编程测试,当局域网中一台工作站指定了该属性,再发出Internet请求时,请求数据将...

    TCP代理服务器proxy-server.zip

    proxy-server 是基于swoole开发的纯异步多进程TCP代理服务器,可支持超大量并发。可完美利用多核,性能强劲。运行程序pecl install swoole php proxy.php压力测试ab -c 1000 -n 100000 -k ...

    代理服务器验证源码 proxy server 

    【代理服务器验证源码 proxy server】是指一种能够检查和验证代理服务器是否正常工作的计算机程序。在本案例中,这是一个基于VC(Visual C++)编写的程序,它利用多线程技术来提高验证效率。 代理...

    Proxy Server(代理服务器)

    代理服务器的源程序,只是一个示范,可以了解Proxy原理

    XProxy是一个代理服务器,内置有NAT、反向代理、直接代理、间接代理等

    XProxy是一个代理服务器,内置有NAT、反向代理、直接代理、间接代理等XProxy是一个代理服务器,内置有NAT、反向代理、直接代理、间接代理等XProxy是一个代理服务器,内置有NAT、反向代理、直接代理、间接代理等X...

    ProxyServer (Android 2.1+).apk

    ProxyServer (Android 2.1+).apk

    Proxy Server 代理服务器的源程序

    代理服务器的源程序,只是一个示范,可以了解Proxy原理

    设置Proxy Server和SQL Server实现互联网上数据库的安全

    2. **指定协议名称**:通常情况下,协议名称可以保持默认,也可以自定义一个易于识别的名字。 3. **设置端口号**:这里我们使用的是SQL Server默认监听的端口号1433。 4. **选择类型**:选择TCP作为传输协议,这有助...

    goproxy-android snail007/goproxy全能代理服务器安卓版

    GoProxy-Android就是这样一个实现,它在安卓设备上搭建了一个本地代理服务器,允许用户设置自定义的代理规则。 3. 安卓SDK:为了方便开发者在Android平台上集成GoProxy,snail007/goproxy团队提供了专门的安卓SDK。...

    Java_ProxyServer.rar_Java ProxyServer_java proxy server

    Java ProxyServer是一个基于Java实现的代理服务器类,它在客户端和服务器之间起到了中继的作用,允许数据在两者间传输。代理服务器在计算机网络中的主要功能是提供代理服务,它可以隐藏客户端的真实身份,增加网络...

    test_proxy_server.zip

    在IT行业中,尤其是在Web开发...通过运行提供的Node.js服务器脚本,我们可以创建一个代理层,使前端能顺利与后端API进行通信,提升开发效率。在实际项目中,根据具体需求,可能还需要考虑安全性和性能优化等更多因素。

    一个写得不错的C语言的Proxy Server

    标题中的“一个写得不错的C语言的Proxy Server”指的是一个使用C语言编写的代理服务器程序。代理服务器在计算机网络中起到中介的作用,它接收客户端的请求,并转发到目标服务器,同时也可以缓存数据,提高访问速度,...

    httpProxy 代理服务器源码

    httpProxy,http/https代理服务器的源码,VC编译测试通过

    proxyServer squid / varnish / apache traffic server / ATS

    proxyServer squid / varnish / apache traffic server / ATS 这篇博文讨论了代理服务器的基本概念,并重点介绍了Squid、Varnish和Apache Traffic Server(ATS)这三种流行的代理缓存服务器软件。下面将详细阐述这些...

    使用Proxy创建代理服务器

    本教程将详细讲解如何使用Java编程语言来创建一个代理服务器,以实现对网络请求的转发处理。 首先,我们需要理解代理服务器的基本原理。代理服务器是一个位于客户端和目标服务器之间的中间服务器,它接收客户端的...

    proxyserver

    一个用python写成的简易代理服务器proxyserver,可以通过该服务器对用户端请求做出应答

    LY Http Proxy Server

    一个免费小型的HTTP, Tunnel, Socks5 TCP代理服务器,在小型局域网上,特别是校园网上有着其优势。可以方便的改变上一级代理,对于经常要改变代理服务器地址的个人特别方便。还有IP地址绑定,用户权限,过滤,禁用...

    HttpProxy HTTP代理服务器

    HttpProxy HTTP代理服务器 HttpProxy HTTP代理服务器 HttpProxy HTTP代理服务器 HttpProxy HTTP代理服务器

Global site tag (gtag.js) - Google Analytics