Android與Java 伺服器使用Socket協議實現Json資料傳輸
阿新 • • 發佈:2019-01-27
Json資料的操作非常簡單,總的來說就是幾個物件的賦值。新建Json物件時,可以先新建一個名為root的 Json物件作為最後要傳送出去的Json物件,然後再往root中新增Json鍵值對或者Json陣列等資料。
用Socket協議傳送Json資料時,只需把新建好的Json物件呼叫toString()方法包裹在流中就可以了,然後通過socket進行流的輸入和輸出操作(參考http://blog.csdn.net/meanme/article/details/43115381)
不管實在客戶端還是服務端,一般流的操作輸出流選擇PrintWriter,輸入流選擇BufferedReader
附上原始碼(服務端)
MyServerSocket類
package socket.json;
public class MyServerSocket {
public static void main(String[] args) {
new MySocketListener().start();
}
}
MySocketListener類
JsonSocket類package socket.json; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class MySocketListener extends Thread { private ServerSocket mServerSocket=null; private Socket mSocket; private JsonSocket mJsonSocket; @Override public void run() { try { // 將伺服器的埠號設定為11112 mServerSocket = new ServerSocket(11112); int i=0; while (true) { mSocket = new Socket(); // 獲取連線伺服器的socket物件 mSocket = mServerSocket.accept(); System.out.println("已有客戶端連線,編號:"+i); i++; // 將socket物件傳給JsonSocket中的的Socket物件,用來讀取輸入流和處理Json資料 mJsonSocket = new JsonSocket(mSocket); mJsonSocket.start(); }<pre name="code" class="java">
package socket.json; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class JsonSocket extends Thread { private Socket mSocket_json; public JsonSocket(Socket s) { this.mSocket_json = s; } @Override public void run() { super.run(); getJson(); } public void getJson() { try { JsonParser parser = new JsonParser(); // 從已連線的Socket中獲取輸入流 InputStream in = mSocket_json.getInputStream(); InputStreamReader inR = new InputStreamReader(in, "utf-8"); BufferedReader br = new BufferedReader(inR); // 將流傳給Json物件 JsonObject jsonObj = (JsonObject) parser.parse(br); System.out.println("傢俱名稱:" + jsonObj.get("FurName").getAsString()); // 獲取json物件中的json陣列 JsonArray array = jsonObj.get("Parameters").getAsJsonArray(); // 獲取json陣列的各個物件的值 for (int i = 0; i < 2; i++) { JsonObject jsonObject = new JsonObject(); jsonObject = array.get(i).getAsJsonObject(); // 列印 System.out.println("id=" + jsonObject.get("id").getAsInt()); System.out.println("name=" + jsonObject.get("name").getAsString()); } // 記得關閉輸入流 br.close(); } catch (IOException e) { e.printStackTrace(); } } }
另外客戶端原始碼在我的github上,util包中(https://github.com/meanmee/SmartHome)
轉載請署名出處,尊重勞動成果。