把移動端作爲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(二)—— 實現監聽並驗證