標籤:
正處於網路環境下的兩個程式,它們之間通過一個互動的串連來實現資料通訊。每一個串連的通訊端叫做一個Socket。一個完整的Socket通訊程式應該包含以下幾個步驟:
①建立Socket;
②開啟串連到Socket的輸入輸出資料流;
④按照一定的協議對Socket進行讀寫操作;
④關閉Socket。
Socket通訊分兩部分:伺服器端和用戶端。伺服器端必須優先啟動,然後等待socket串連,如果達成串連則開始執行輸入輸出操作,通過輸入資料流擷取用戶端的請求資訊,通過
輸出資料流返回用戶端資訊。用戶端則只需建立一個Socket指定伺服器的ip和連接埠號碼即可。
下面看伺服器代碼:
public class SocketServer { public static int port = 3333; public static String ip = "172.30.1.101"; public static void main(String[] args) throws IOException { //啟動伺服器 ServerSocket server = new ServerSocket(port); System.out.println("server running..."); //監聽Socket Socket socket = server.accept(); //IO流 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); String client = null; //如果接收到用戶端的exit訊號則關閉Socket while(!"exit".equalsIgnoreCase(client = br.readLine())){ System.out.println("from client say:"+client); pw.println("server get your info :" +client); pw.flush(); } br.close(); pw.close(); socket.close(); server.close(); } }
下面看用戶端代碼:
public class SocketClient { public static void main(String[] args) throws IOException { //串連伺服器 Socket socket = new Socket(SocketServer.ip,SocketServer.port); System.out.println("client running..."); System.out.println("-----insert your info:"); //使用者在控制台輸入向伺服器發送的資訊 BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in)); //IO流 PrintWriter pw = new PrintWriter(socket.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String server = null; //如果使用者輸入exit則關閉Socket while(!"exit".equalsIgnoreCase(server = brConsole.readLine())){ pw.println(server); pw.flush(); System.out.println("from server say:"+br.readLine()); } //當使用者輸入exit時,把exit資訊發送給伺服器,伺服器關閉當前Socket pw.println(server); pw.flush(); pw.close(); brConsole.close(); br.close(); socket.close(); }}
需要注意的是:
測試時,首先啟動伺服器,然後啟動用戶端即可;
使用PrintWriter寫資料的時候務必使用println,因為對方使用BufferReader的readline來取資料,如果使用print則BufferReader讀取不到資料。
這隻是基礎執行個體,不支援並發。
java通訊之Socket通訊基礎