加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java 建立带有套接字的简单代理服务器示例

发布时间:2023-03-29 11:01:39 所属栏目:教程 来源:
导读:在这些示例中,您可以找到创建简单代理套接字服务器的不同方法。由于多种原因,这对您很有用:捕获客户端和服务器之间的流量。 限制上传/下载带宽,以了解您的网站是如何加载慢速连接的。 查看网络出现问题时系统的反
在这些示例中,您可以找到创建简单代理套接字服务器的不同方法。由于多种原因,这对您很有用:捕获客户端和服务器之间的流量。 限制上传/下载带宽,以了解您的网站是如何加载慢速连接的。 查看网络出现问题时系统的反应。 "动态"修改客户端/服务器的内容(发送的接收)。 生成有关流量的统计信息。*您可以使用此处的示例作为开发的基础。尚未实现任何功能。以下示例只是代理。您不能总是将它们用作 HTTP 代理。示例 1(多插槽代理服务器)使用示例 1 作为另一个 HTTP 代理的 HTTP 代理示.

在这些示例中,您可以找到创建简单代理套接字服务器的不同方法。由于多种原因,这对您很有用:

捕获客户端和服务器之间的流量。
限制上传/下载带宽,以了解您的网站是如何加载慢速连接的。
查看网络出现问题时系统的反应。
"动态"修改客户端/服务器的内容(发送的接收)。
生成有关流量的统计信息。
*您可以使用此处的示例作为开发的基础。尚未实现任何功能。以下示例只是代理。您不能总是将它们用作 HTTP 代理。

示例 1(多插槽代理服务器) 

使用示例 1 作为另一个 HTTP 代理的 HTTP 代理

示例 2(同时只有 1 个插槽)

示例 3 HTTP 代理

示例 1
import java.io.*;
import java.net.*;
/**
 *
 * @author jcgonzalez.com
 *
 */
public class ProxyMultiThread {
    public static void main(String[] args) {
        try {
            if (args.length != 3)
                throw new IllegalArgumentException("insuficient arguments");
            // and the local port that we listen for connections on
            String host = args[0];
            int remoteport = Integer.parseInt(args[1]);
            int localport = Integer.parseInt(args[2]);
            // Print a start-up message
            System.out.println("Starting proxy for " + host + ":" + remoteport + " on port " + localport);
            ServerSocket server = new ServerSocket(localport);
            while (true) {
                new ThreadProxy(server.accept(),host,remoteport);
            }
        } catch (Exception e) {
            System.err.println(e);
            System.err.println("Usage: java ProxyMultiThread " + "<host> <remoteport> <localport>");
        }
    }
}
/**
 * Handles a socket connection to the proxy server from the client and uses 2
 * threads to proxy between server and client
 *
 * @author jcgonzalez.com
 *
 */
class ThreadProxy extends Thread {
    private Socket sClient;
    private final String SERVER_URL;
    private final int SERVER_PORT;
    ThreadProxy(Socket sClient,String ServerUrl,int ServerPort) {
        this.SERVER_URL = ServerUrl;
        this.SERVER_PORT = ServerPort;
        this.sClient = sClient;
        this.start();
    }
    @Override
    public void run() {
        try {
            final byte[] request = new byte[1024];
            byte[] reply = new byte[4096];
            final InputStream inFromClient = sClient.getInputStream();
            final OutputStream outToClient = sClient.getoutputStream();
            Socket client = null,server = null;
            // connects a socket to the server
            try {
                server = new Socket(SERVER_URL,SERVER_PORT);
            } catch (IOException e) {
                PrintWriter out = new PrintWriter(new OutputStreamWriter(outToClient));
                out.flush();
                throw new RuntimeException(e);
            }
            // a new thread to manage streams from server to client (DOWNLOAD)
            final InputStream inFromServer = server.getInputStream();
            final OutputStream outToServer = server.getoutputStream();
            // a new thread for uploading to the server
            new Thread() {
                public void run() {
                    int bytes_read;
                    try {
                        while ((bytes_read = inFromClient.read(request)) != -1) {
                            outToServer.write(request,bytes_read);
                            outToServer.flush();
                            // Todo CREATE YOUR LOGIC HERE
                        }
                    } catch (IOException e) {
                    }
                    try {
                        outToServer.close();
                    } catch (IOException e) {
                        e.printstacktrace();
                    }
                }
            }.start();
            // current thread manages streams from server to client (DOWNLOAD)
            int bytes_read;
            try {
                while ((bytes_read = inFromServer.read(reply)) != -1) {
                    outToClient.write(reply,bytes_read);
                    outToClient.flush();
                    // Todo CREATE YOUR LOGIC HERE
                }
            } catch (IOException e) {
                e.printstacktrace();
            } finally {
                try {
                    if (server != null)
                        server.close();
                    if (client != null)
                        client.close();
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }
            outToClient.close();
            sClient.close();
        } catch (IOException e) {
            e.printstacktrace();

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章