標籤:java socket 通訊
用socket(通訊端)實現用戶端與服務端的通訊。
這裡舉兩個例子:
第一種是每次用戶端發送一個資料,服務端就做一個應答。(也就是要輪流發)
第二種是用戶端可以連續的向服務端發資料,服務端也可以連續向用戶端發資料。(多線程)
為了方便起見,用戶端服務端都放在一個主機上,分別開兩個進程[哈哈,處理序間通訊lol~]
PS: 一個聊天程式雛形
代碼也放在GitHub上了:https://github.com/MummyDing/socketChatDemo
Demo 1:
簡單的Socket通訊,一人一句話就結束了(要一直說加個迴圈就好)
用戶端
/**ClientAuthor :MummyDing*/import java.lang.Runnable; import java.io.*; import java.net.*;class clientConnect{ Socket client = null; BufferedReader inputData = null; PrintWriter outputData = null; String receiveData ,sendData ; clientConnect(){ try { client = new Socket("127.0.0.1", 5234); dealData(); } catch (Exception e) { System.out.println("I cann't Connect!"); System.exit(1); } } void dealData(){ try{ outputData = new PrintWriter(client.getOutputStream(), true); inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); sendMsg(); receiveMsg(); }catch (Exception e) { System.out.println("Error ~"); } } void sendMsg(){ outputData.println("Hello Server"); } void receiveMsg(){ try{ receiveData = inputData.readLine(); System.out.println("Server said "+receiveData); }catch (Exception e) { System.out.println("Error"); } }}public class Client {public static void main(String[] args) { clientConnect connecte = new clientConnect(); }}
服務端:
/**ServerAuthor :MummyDing*/import java.lang.Runnable; import java.net.*;import java.io.*;class serverConnect {ServerSocket serverSocket = null; Socket clientSocket = null;String receiveData,sendData;serverConnect(){try { serverSocket = new ServerSocket(5234); clientSocket = serverSocket.accept(); dealData(); } catch (Exception e) { System.out.println("Server Bulid Error"); System.exit(1); }}void dealData(){try{PrintWriter outputData = new PrintWriter(clientSocket.getOutputStream(), true);BufferedReader inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));receiveData = inputData.readLine(); System.out.println("Client say:"+ receiveData);outputData.println("Ha ha , I got your info: "+receiveData); }catch (Exception e) {System.out.println("Error!");}}}public class Server{public static void main(String[] args) { serverConnect connecte = new serverConnect(); }}
Demo 2:
在Demo 1的基礎上進行了該進,實現了一人可以連續說幾句話。(多線程)
用戶端:
/**ClientAuthor:MummyDing*/import java.util.Scanner;import java.lang.Runnable; import java.io.*; import java.net.*;class clientConnect{ Socket client = null; BufferedReader inputData = null; PrintWriter outputData = null; String receiveData ,sendData ; clientConnect(){ try { client = new Socket("127.0.0.1", 5234); dealData(); outputData.println("OK"); } catch (Exception e) { System.out.println("I cann't Connecte!"); System.exit(0); } } void dealData(){ try{ outputData = new PrintWriter(client.getOutputStream(), true); inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); }catch (Exception e) { System.out.println("Error ~"); System.exit(0); } } String sendMsg(){ Scanner sc = new Scanner(System.in); sendData = sc.nextLine(); outputData.println(sendData); outputData.flush(); System.out.println("I say:"+ sendData); return sendData; } boolean receiveMsg(){ try{ receiveData = inputData.readLine(); if(receiveData.equals("shutdown")) return false; System.out.println("Server said "+receiveData); }catch (Exception e) { System.out.println("Error"); System.exit(0); } return true; }}public class Client {public static void main(String[] args) {clientConnect connect = new clientConnect();Thread t = new Thread(new Runnable(){ public void run(){ while(true){ connect.dealData(); if(connect.receiveMsg() == false){ System.out.println("SHUTDOWN!!!"); System.exit(0); } } } }); t.start(); while(connect.sendMsg().equals("shutdown") == false){ } System.exit(0);}}
服務端:
/**ServerAuthor:MummyDing*/import java.util.Scanner;import java.lang.Runnable; import java.net.*;import java.io.*;class serverConnect {ServerSocket serverSocket = null; Socket clientSocket = null;String receiveData,sendData;PrintWriter outputData ;BufferedReader inputData;serverConnect(){try { serverSocket = new ServerSocket(5234); clientSocket = serverSocket.accept(); } catch (Exception e) { System.out.println("Server Bulid Error"); System.exit(1); }}void dealData(){try{ outputData = new PrintWriter(clientSocket.getOutputStream(), true); inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));}catch (Exception e) {System.out.println("Error!"); System.exit(0);}}boolean receiveMsg(){try{receiveData = inputData.readLine(); if(receiveData.equals("shutdown")) return false ;System.out.println("Client say:"+ receiveData);}catch (Exception e) {System.out.println("receive Error~");System.exit(0);}return true;}String sendMsg(){Scanner sc = new Scanner(System.in); sendData = sc.nextLine(); outputData.println(sendData); outputData.flush();System.out.println("I say:"+ sendData);return sendData;}}public class Server{public static void main(String[] args) {serverConnect connect = new serverConnect();Thread t = new Thread(new Runnable(){public void run(){while(true){connect.dealData();if(connect.receiveMsg() == false){ System.out.println("SHUTDOWN!!!"); System.exit(0); }}}});t.start();while(connect.sendMsg().equals("shutdown") == false){}System.exit(0);}}
--------------------------------------------------
期間犯了一個很二的錯誤,用戶端和服務端裡面用了"同名類",這就導致後編譯的把前面的"同名類"覆蓋掉了。
【轉載請註明出處】
作者:MummyDing
出處:http://blog.csdn.net/mummyding/article/details/46445675
【Java】Java Socket 通訊樣本