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(); (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
