- public class Client {
- public static void main(String args[]) throws Exception {
- //為了簡單起見,所有的異常都直接往外拋
- String host = "127.0.0.1"; //要連接的服務端IP地址
- int port = 8899; //要連接的服務端對應的監聽端口
- //與服務端建立連接
- Socket client = new Socket(host, port);
- //建立連接后就可以往服務端寫數據了
- Writer writer = new OutputStreamWriter(client.getOutputStream());
- writer.write("Hello Server.");
- writer.flush();//寫完后要記得flush
- writer.close();
- client.close();
- }
- }
對於客戶端往Socket的輸出流里面寫數據傳遞給服務端要注意一點,如果寫操作之后程序不是對應着輸出流的關閉,而是進行其他阻塞式的操作(比如從輸入流里面讀數據),記住要flush一下,只有這樣服務端才能收到客戶端發送的數據,否則可能會引起兩邊無限的互相等待。在稍后講到客戶端和服務端同時讀和寫的時候會說到這個問題。
BufferedReader的readLine方法是一次讀一行的,這個方法是阻塞的,直到它讀到了一行數據為止程序才會繼續往下執行,那么readLine什么時候才會讀到一行呢?直到程序遇到了換行符或者是對應流的結束符readLine方法才會認為讀到了一行,才會結束其阻塞,讓程序繼續往下執行。所以我們在使用BufferedReader的readLine讀取數據的時候一定要記得在對應的輸出流里面一定要寫入換行符(流結束之后會自動標記為結束,readLine可以識別),寫入換行符之后一定記得如果輸出流不是馬上關閉的情況下記得flush一下,這樣數據才會真正的從緩沖區里面寫入。