移動端搭建Http Server(一)—— 總述

把移動端作爲Server的例子有wifi傳書,愛分享文件互傳,下面會介紹原理和簡單的實現。

實踐功能:
1.設計並實現一個http server微架構
2.實現app內置網頁訪問功能
3.wifi傳圖

涉及到的基本知識有:
1.傳輸協議與應用協議概念
2.java socket基礎
3.get和post協議格式
4.開發機與模擬器網絡調試工具與配置

1.傳輸層協議與應用層協議

這裏寫圖片描述

注意:一種應用層協議是可以使用多種傳輸層協議來實現,比如http協議

TCP協議的特性:

  • 面向連接(需要先建立連接然後才能進行應用層協議的通信,三次握手四次揮手)

    這裏寫圖片描述

  • 數據可靠性
    每個數據包都有校驗位,ACK防丟包

UDP協議特性:

  • 不面向連接(不需要向TCP那樣建立連接纔可進行通信)
  • 不提供數據可靠性校驗
  • 速度快

兩個協議選擇:

  • 容錯性(允許適當出錯) 高-UDP 低-TCP
  • 數據包大小 小-UDP 大-TCP
  • 承受丟包風險 是-UDP 否-TCP

比如音視頻直播即時通信需要使用UDP

2.java socket基礎

服務端:ServerSocket
① 創建ServerSocket對象,綁定監聽端口
② 通過accept()方法監聽客戶端請求
③ 連接建立後,通過輸入流讀取客戶端發送的請求信息
④ 通過輸出流向客戶端發送鄉音信息
⑤ 關閉相關資源
示例代碼:

try {
      //1024-65535的某個端口
      ServerSocket serverSocket = new ServerSocket(58888);
      Socket socket = serverSocket.accept();
      InputStream in = socket.getInputStream();
      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
      String line = null;
      while ((line = reader.readLine())!=null) {
          System.out.pringln("this is server, client sent content is :" + line);
      }
      //關閉輸入流
      socket.shutdownInput();
      OutputStream os = socket.getOutputStream();
      PrintWriter writer = new PrintWriter(os);
      writer.write("received");
      writer.flush();
      //關閉資源
      serverSocket.close();
      socket.close();
      in.close();
      reader.close();
      os.close();
      writer.close();
  } catch (IOException e) {
      e.printStackTrace();
  }

客戶端 Socket

① 創建Socket對象,指明需要連接的服務器的地址和端口號
② 連接建立後,通過輸出流向服務器端發送請求信息
③ 通過輸入流獲取服務器響應的信息
④ 關閉響應資源

示例代碼:

try {
      Socket socket = new Socket("192.168.1.107", 58888);
      OutputStream os = socket.getOutputStream();
      PrintWriter writer = new PrintWriter(os);
      writer.write("this is client");
      writer.flush();
      socket.shutdownOutput();
      BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      String line = null;
      while ((line = reader.readLine()) != null){
          System.out.println("this is client, server reply content is :" + line);
      }
      //關閉資源
      reader.close();
      writer.close();
      os.close();
      socket.close();
  } catch (IOException e) {
      e.printStackTrace();
  }

3.開發環境配置

  • 使用真機,確保開發機和真機處於同一網段內
  • 使用模擬器,模擬器上訪問當前開發機IP:10.0.2.2
  • 開發機方位模擬器端口需要進行端口映射
    - telnet localhost 5554
    - redir add tcp:8088:8088
    這樣訪問了開發機的8088端口就相當於訪問了模擬器的8088端口

下篇會講解具體Coding實現 移動端搭建Http Server(二)—— 實現監聽並驗證

發佈了44 篇原創文章 · 獲贊 37 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章