用於網路Socket的串流物件
因為Java的標準化,基本上為使用Java標準輸出輸入(I/O)物件就可以了。
輸入
- InputStream(由Socket物件
getInputStream()
方法取得。 - InputStreamReader(以Byte的方式來讀取資料)。
- BufferedReader(用來一次讀取一行字串)。
範例:
// 向伺服器讀取訊息的物件 InputStreamReader isr = null; try { isr = new InputStreamReader(s.getInputStream()); } catch (IOException e) { Log.d("ChattingRoom:Client", e.getMessage()); } // 用來一次讀取一條指令的物件 BufferedReader br = new BufferedReader(isr); while(true) { if(s.isConnected()) { String str = ""; try { // 從伺服器一次讀取一行協定 str = br.readLine(); // 判斷是否已經和伺服器斷線了 if(str == null) { s.close(); break; } } catch (IOException e) { Log.d("ChattingRoom:Client", e.getMessage()); break; } Log.d("ChattingRoom:Client", "Client received " + str); // ...處理資料程式碼... } else { Log.d("ChattingRoom:Client", "Disconnected"); } }
輸出
- OutputStream(由Sokcet物件
getOutputStream()
方法取得。 - OutputStreamWriter(以Byte的方式來輸出資料)。
- PrintWriter(用來一次輸出一行字串)。
範例:
try { Socket s = new Socket(ip, port); // 建立要用來輸入訊息到伺服器的物件 OutputStreamWriter osr = new OutputStreamWriter(s.getOutputStream()); BufferedWriter bw = new BufferedWriter(osr); out = new PrintWriter(bw); // 如果到這裡沒產生例外,表示連線成功,通知伺服器登入的使用者名字 out.println(RoomProtocol.CLIENT_LOGIN + name); // 送出資料 out.flush(); } catch (UnknownHostException e) { Log.d("ChattingRoom:Client", e.getMessage()); } catch (IOException e) { Log.d("ChattingRoom:Client", e.getMessage()); }