【Java】Java Socket 通訊樣本

來源:互聯網
上載者:User

標籤: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 通訊樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.