android-Android开发 如何设置代理服务器

问题描述

Android开发 如何设置代理服务器

请问如何通过编写程序设置代理服务器,如果实在不行可以使用ROOT权限,最好不要用ROOT

解决方案

和台式机一样的, 显示Android手机要和台式机要在同一个局域网, 之后要找一种办法让android和pc建立连接,。你是Android作为代理服务器还是Android连代理服务器?
以下代码来源网上:

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

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

/**
 * This class uses the Server class to provide a multi-threaded server
 * framework for a relatively simple proxy service.  The main() method
 * starts up the server.  The nested Proxy class implements the
 * Server.Service interface and provides the proxy service.
 **/
public class ProxyServer {
  /**
   * Create a Server object, and add Proxy service objects to it to provide
   * proxy service as specified by the command-line arguments.
   **/
  public static void main(String[] args) {
    try {
      // Check number of args.  Must be a multiple of 3 and > 0.
      if ((args.length == 0) || (args.length % 3 != 0))
        throw new IllegalArgumentException("Wrong number of arguments");

      // Create the Server object
      Server s = new Server(null, 12); // log stream, max connections

      // Loop through the arguments parsing (host, remoteport, localport)
      // tuples.  Create an appropriate Proxy object, and add it to the server
      int i = 0;
      while(i < args.length) {
        String host = args[i++];
        int remoteport = Integer.parseInt(args[i++]);
        int localport = Integer.parseInt(args[i++]);
        s.addService(new Proxy(host, remoteport), localport);
      }
    }
    catch (Exception e) {  // Print an error message if anything goes wrong.
      System.err.println(e);
      System.err.println("Usage: java ProxyServer " +
                         "<host> <remoteport> <localport> ...");
      System.exit(1);
    }
  }

  /**
   * This is the class that implements the proxy service.  The serve() method
   * will be called when the client has connected.  At that point, it must
   * establish a connection to the server, and then transfer bytes back and
   * forth between client and server.  For symmetry, this class implements
   * two very similar threads as anonymous classes.  One thread copies bytes
   * from client to server, and the other copies them from server to client.
   * The thread that invoke the serve() method creates and starts these
   * threads, then just sits and waits for them to exit.
   **/
  public static class Proxy implements Server.Service {
    String host;
    int port;

    /** Remember the host and port we are a proxy for */
    public Proxy(String host, int port) {
      this.host = host;
      this.port = port;
    }

    /** The server invokes this method when a client connects. */
    public void serve(InputStream in, OutputStream out) {
      // These are some sockets we'll use.  They are final so they can be used
      // by the anonymous classes defined below.
      final InputStream from_client = in;
      final OutputStream to_client = out;
      final InputStream from_server;
      final OutputStream to_server;

      // Try to establish a connection to the specified server and port
      // and get sockets to talk to it.  Tell our client if we fail.
      Socket server;
      try {
        server = new Socket(host, port);
        from_server = server.getInputStream();
        to_server = server.getOutputStream();
      }
      catch (Exception e) {
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
        pw.println("Proxy server could not connect to " + host + ":" + port);
        pw.flush();
        pw.close();
        try { in.close(); } catch (IOException ex) {}
        return;
      }

      // Create an array to hold two Threads.  It is declared final so that
      // it can be used by the anonymous classes below.  We use an array
      // instead of two variables because given the structure of this program
      // two variables would not work if declared final.
      final Thread[] threads = new Thread[2];

      // Define and create a thread to transmit bytes from client to server
      Thread c2s = new Thread() {
        public void run() {
          byte[] buffer = new byte[2048];
          int bytes_read;
          try {
            while((bytes_read = from_client.read(buffer)) != -1) {
              to_server.write(buffer, 0, bytes_read);
              to_server.flush();
            }
          }
          catch (IOException e) {}

          // if the client closed its stream to us, we close our stream
          // to the server.  First, stop the other thread
          threads[1].stop();
          try { to_server.close(); } catch (IOException e) {}
        }
      };

      // Define and create a thread to copy bytes from server to client.
      Thread s2c = new Thread() {
        public void run() {
          byte[] buffer = new byte[2048];
          int bytes_read;
          try {
            while((bytes_read = from_server.read(buffer)) != -1) {
              to_client.write(buffer, 0, bytes_read);
              to_client.flush();
            }
          }
          catch (IOException e) {}

          // if the server closed its stream to us, we close our stream
          // to the client.  First, stop the other thread, though.
          threads[0].stop();
          try { to_client.close(); } catch (IOException e) {}
        }
      };

      // Store the threads into the final threads[] array, so that the
      // anonymous classes can refer to each other.
      threads[0] = c2s; threads[1] = s2c;

      // start the threads
      c2s.start(); s2c.start();

      // Wait for them to exit
      try { c2s.join(); s2c.join(); } catch (InterruptedException e) {}
    }
  }
}

时间: 2024-11-03 21:03:39

android-Android开发 如何设置代理服务器的相关文章

背景设置-android桌面开发如何设置系统内置动态壁纸

问题描述 android桌面开发如何设置系统内置动态壁纸 急!!! 我自己编写了一个android桌面,添加壁纸设置功能,调用系统壁纸选择器后,设置系统动态壁纸无效果,发现桌面背景还是没变化,但是设置静态的图片又可以,求大神大师们解答? 是与布局空间的属性有关还是与AndroidManifest.xml中activity属性参数有关?

android浏览器开发,地址栏用什么组件怎样设置成当获得焦点时输入法中有“前往”或“搜索”键

问题描述 android浏览器开发,地址栏用什么组件怎样设置成当获得焦点时输入法中有"前往"或"搜索"键 想用android写一个android浏览器的小DEMO,地址栏用的原生EDITTEXT组件,说到这里那么问题来了..在EDITTEXT中输入完毕之后,弹出的输入法中没有"前往"或者"搜索"键,网上下载的浏览器比如UC浏览器,地址栏输入后键盘上都有有一个"前往"按钮.这种情况应该如何设置? 解决方案 我

桌面壁纸设置-android桌面开发动态壁纸设置问题?

问题描述 android桌面开发动态壁纸设置问题? 我自己写了一个android桌面,但无法设置动态壁纸,但android自带的桌面又能设置,设置的动态壁纸是系统内置的,android系统为4.0,总是报如下错误:V/RenderScript( 2118): 0x128990 RS Thread exited V/RenderScript( 2118): 0x128990 Context::~Context done V/RenderScript( 2118): 0x128990 rsConte

【ANDROID游戏开发之一】设置全屏以及绘画简单的图形

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/263.html 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读: [Android游戏开发十九](必看篇)Sur

《Android游戏开发详解》一2.2 设置开发机器

2.2 设置开发机器 Android游戏开发详解 在开始编写简单点的Java程序和构建令人兴奋的游戏之前,我们必须在自己的机器上安装一些软件.然而,这个过程有点枯燥且颇费时间,但是,为了让第一个程序开始运行,这些代价都是值得的. 2.2.1 安装Eclipse 我们将利用一个集成开发环境(Integrated Development Environment,IDE)来编写Java/Android应用程序.IDE是一种工具的名称,它能够帮助我们轻松地编写.构建和运行程序. 我们将要使用的IDE叫作

《Android游戏开发详解》——第2章,第2.2节设置开发机器

2.2 设置开发机器 Android游戏开发详解 在开始编写简单点的Java程序和构建令人兴奋的游戏之前,我们必须在自己的机器上安装一些软件.然而,这个过程有点枯燥且颇费时间,但是,为了让第一个程序开始运行,这些代价都是值得的. 2.2.1 安装Eclipse 我们将利用一个集成开发环境(Integrated Development Environment,IDE)来编写Java/Android应用程序.IDE是一种工具的名称,它能够帮助我们轻松地编写.构建和运行程序. 我们将要使用的IDE叫作

Android程序开发之自定义设置TabHost,TabWidget样式_Android

先看效果: 京东商城底部菜单栏 新浪微博底部菜单栏 本次学习效果图: 第一,主布局文件(启动页main.xml,位于res/layout目录下)代码 <?xml version="." encoding="utf-"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_paren

《Android游戏开发详解》一2.12 设置和访问对象的状态

2.12 设置和访问对象的状态 Android游戏开发详解现在,我们可以访问一个Phone对象了.myPhone表示使用Phone类(class)创建的一个单个的Phone对象(object).它是一个独立的实体,独立于我们将来可能使用蓝图(Phone类)创建的任何其他Phone对象.我们使用实例(instance)这个术语来描述这种现象. 为了更加具体地说明,让我们考虑一下,在工厂中批量生产智能手机的时候会发生什么情况.我们使用相同的蓝图来生产数以千计的设备,而且它们都是彼此独立的.它们可以有

《Android游戏开发详解》——第2章,第2.12节设置和访问对象的状态

2.12 设置和访问对象的状态Android游戏开发详解现在,我们可以访问一个Phone对象了.myPhone表示使用Phone类(class)创建的一个单个的Phone对象(object).它是一个独立的实体,独立于我们将来可能使用蓝图(Phone类)创建的任何其他Phone对象.我们使用实例(instance)这个术语来描述这种现象. 为了更加具体地说明,让我们考虑一下,在工厂中批量生产智能手机的时候会发生什么情况.我们使用相同的蓝图来生产数以千计的设备,而且它们都是彼此独立的.它们可以有自