<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                本文來自[http://blog.csdn.net/hellogv/](http://blog.csdn.net/hellogv/),引用必須注明出處!?????? ?????? 最近半年都忙著Android TV項目,在春節假期才有時間寫點東西。先在這里給大家拜個年,祝大家龍年快樂... ?????? 直接進入主題:本文將會教大家如何實現一個簡單的代理服務器(僅支持Http Get),與Android的MediaPlayer結合,從而可以擴展出“播放 防盜鏈的媒體文件”,“邊播放邊保存”等的功能。 ?????? 本文的代碼可以到這里下載:[http://download.csdn.net/detail/hellogv/4047134](http://download.csdn.net/detail/hellogv/4047134),代碼分為兩個工程: 1. J2SE工程:HttpGetProxy,在PC上實現簡單的代理服務器,核心類是HttpGetProxy.java,非常容易使用,這里就不嘮叨了直接貼出運行效果圖:![](https://box.kancloud.cn/2016-06-24_576cb0a89c746.gif) 1. Android工程:本文重點,必須嘮叨一下。MediaPlayer播放網絡音頻([http://blog.csdn.net/hellogv/article/details/6406732](http://blog.csdn.net/hellogv/article/details/6406732))與HttpGetProxy.java結合,通過代理服務器播放網絡音頻。 ?? 接下來貼出HttpGetProxy.java的原理圖: ![](https://box.kancloud.cn/2016-06-24_576cb0a8b4c66.gif) ?接下來貼出HttpGetProxy.java的源碼: 通過RemoteSocket的out_remoteSocket可以訪問防盜鏈資源,HttpGetProxy通過2個線程來實現轉發,可以在兩個線程內實現保存的功能。 ~~~ package com.musicplayer; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; import java.net.UnknownHostException; import android.util.Log; public class HttpGetProxy { final private String LOCAL_IP_ADDRESS = "127.0.0.1"; final private int HTTP_PORT = 80; private ServerSocket localServer = null; private Socket localSocket = null; private Socket remoteSocket = null; private String remoteIPAddress; private InputStream in_remoteSocket; private OutputStream out_remoteSocket; private InputStream in_localSocket; private OutputStream out_localSocket; private interface OnFinishListener { void onFinishListener(); } public HttpGetProxy(int localport) { // --------建立代理中轉服務器-----------// try { localServer = new ServerSocket(localport, 1, InetAddress.getByName(LOCAL_IP_ADDRESS)); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 結束時,清除所有資源 */ private OnFinishListener finishListener =new OnFinishListener(){ @Override public void onFinishListener() { System.out.println("..........release all.........."); Log.e("---->","..........release all.........."); try { in_localSocket.close(); out_remoteSocket.close(); in_remoteSocket.close(); out_localSocket.close(); localSocket.close(); remoteSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; public void startProxy(String remoteIpAddr) throws IOException { remoteIPAddress = remoteIpAddr; SocketAddress address = new InetSocketAddress(remoteIPAddress,HTTP_PORT); // --------連接目標服務器---------// remoteSocket = new Socket(); remoteSocket.connect(address); System.out.println("..........remote Server connected.........."); Log.e("---->","..........remote Server connected.........."); in_remoteSocket = remoteSocket.getInputStream(); out_remoteSocket = remoteSocket.getOutputStream(); System.out.println("..........init remote Server I/O.........."); /** * 接收本地request,并轉發到遠程服務器 */ new Thread() { public void run() { int bytes_read; byte[] local_request = new byte[5120]; try { // 本地Socket localSocket = localServer.accept(); System.out.println("..........localSocket connected.........."); Log.e("---->","..........localSocket connected.........."); in_localSocket = localSocket.getInputStream(); out_localSocket = localSocket.getOutputStream(); System.out.println("..........init local Socket I/O.........."); Log.e("---->","..........init local Socket I/O.........."); String buffer = ""; while ((bytes_read = in_localSocket.read(local_request)) != -1) { String str = new String(local_request); System.out.println("localSocket " + str); Log.e("localSocket---->",str); buffer = buffer + str; if (buffer.contains("GET") && buffer.contains("\r\n\r\n")) { //---把request中的本地ip改為遠程ip---// buffer = buffer.replace(LOCAL_IP_ADDRESS,remoteIPAddress); System.out.println("已經替換IP"); out_remoteSocket.write(buffer.getBytes()); out_remoteSocket.flush(); continue; } else{ out_remoteSocket.write(buffer.getBytes()); out_remoteSocket.flush(); } } System.out.println("..........local finish receive..........."); Log.e("---->","..........local finish receive.........."); finishListener.onFinishListener(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); /** * 接收遠程服務器reply,并轉發到本地客戶端 */ new Thread() { public void run() { int bytes_read; byte[] remote_reply = new byte[5120]; try { System.out.println("..........remote start to receive..........."); Log.e("---->","..........remote start to receive.........."); while ((bytes_read = in_remoteSocket.read(remote_reply)) != -1) { //System.out.println("remoteSocket " + remote_reply.length); //System.out.println("remoteSocket " + new String(remote_reply)); out_localSocket.write(remote_reply, 0, bytes_read); out_localSocket.flush(); } System.out.println("..........remote finish receive..........."); Log.e("---->","..........remote finish receive.........."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } } ~~~ ?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看