以下例子實現了利用socket簡易雙向通訊的例子java
1.創建兩個java project,目錄以下
服務器
2.客戶端代碼socket
package client; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String args[]) { try{ //建立客戶端套接字 Socket socket = new Socket("127.0.0.1", 9999); //獲取套接字輸入流 InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); //獲取套接字輸出流 OutputStream os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); //從鍵盤輸入 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); //聊天 String message; while (true) { //讀取鍵盤輸入的字符,寫到客戶端輸出流 message = br.readLine(); dos.writeUTF(message); if(message.equals("88")) break; //讀取服務器端的數據並打印到屏幕上 message = dis.readUTF(); System.out.println("服務器傳回的消息:"+message); } //關閉流 dis.close(); dos.close(); socket.close(); }catch(Exception e) { e.printStackTrace(); } } }
3.服務器端代碼.net
package server; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String args[]) { try { //建立一個ServerSocket,在端口號9999上監聽客戶端請求 ServerSocket serverSocket = new ServerSocket(9999); Socket socket = serverSocket.accept(); //獲取客戶端套接字的輸出流 OutputStream os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); //獲取客戶端輸入流 InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); //建立字符輸入流接受鍵盤輸入 InputStreamReader isr= new InputStreamReader(System.in); BufferedReader br= new BufferedReader(isr); //消息 String message; while (true) { //獲取客戶端輸入流 message = dis.readUTF(); System.out.println("客戶端發過來消息:"+message); if(message.equals("88")) break; //讀取鍵盤輸入並寫入到輸出流 message = br.readLine(); dos.writeUTF(message); } dis.close(); dos.close(); serverSocket.close(); socket.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
4.調試調試
1>服務器端項目 Run as-->Java Application,能夠打個log看下啓動成功。code
2>客戶端項目 Run as-->Java Application,能夠打個log看下啓動成功。客戶端運行起來後會覆蓋服務端的log。server
3>先將控制權調到客戶端這邊,即用鼠標點擊客戶端main方法,在控制檯(console)裏面輸入客戶端須要發送的消息,回車鍵便可發送。get
此時控制檯會輸出消息客戶端發過來消息:xxxxxxx(這是你本身輸入的消息)it
4>將控制權調到服務器這邊,即用鼠標點擊服務器端main方法,在控制檯(console)裏面輸入服務器端須要發送的消息,回車鍵便可發送。io
以下是調試截圖
4.1 客戶端輸入,還未回車
4.2 客戶端點擊了回車鍵,服務器端收到的消息
4.3 接着,服務器端回消息
4.4 客戶端再發消息
至此,完成了簡單的即時通信。