国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java--Socket通信(客戶端服務(wù)端雙向)

2019-11-26 13:12:50
字體:
供稿:網(wǎng)友

新建兩個工程,一個客戶端,一個服務(wù)端,先啟動服務(wù)端再啟動客戶端

兩個工程的讀寫操作線程類基本上完全相同

服務(wù)端:

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;  public class Server {    public static final int PORT = 8000;//監(jiān)聽的端口號      public static void main(String[] args) {      Server server = new Server();      server.init();    }     public void init() {      ServerSocket serverSocket = null;     try {        serverSocket = new ServerSocket(PORT);        while (true) {          Socket client = serverSocket.accept();          //一個客戶端連接就開戶兩個線程處理讀寫          new Thread(new ReadHandlerThread(client)).start();          new Thread(new WriteHandlerThread(client)).start();        }      } catch (Exception e) {        e.printStackTrace();      } finally{       try {         if(serverSocket != null){           serverSocket.close();         }       } catch (IOException e) {         e.printStackTrace();       }     }   }  }   /*  *處理讀操作的線程   */ class ReadHandlerThread implements Runnable{   private Socket client;    public ReadHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataInputStream dis = null;     try{       while(true){         //讀取客戶端數(shù)據(jù)          dis = new DataInputStream(client.getInputStream());         String reciver = dis.readUTF();         System.out.println("客戶端發(fā)過來的內(nèi)容:" + reciver);        }     }catch(Exception e){       e.printStackTrace();     }finally{       try {         if(dis != null){           dis.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } }  /*  * 處理寫操作的線程  */ class WriteHandlerThread implements Runnable{   private Socket client;    public WriteHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataOutputStream dos = null;     BufferedReader br = null;     try{       while(true){         //向客戶端回復(fù)信息          dos = new DataOutputStream(client.getOutputStream());          System.out.print("請輸入:/t");          // 鍵盤錄入          br = new BufferedReader(new InputStreamReader(System.in));         String send = br.readLine();          //發(fā)送數(shù)據(jù)         dos.writeUTF(send);        }     }catch(Exception e){       e.printStackTrace();     }finally{       try {         if(dos != null){           dos.close();         }         if(br != null){           br.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } } 

客戶端:

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;  public class Client {    public static final String IP = "localhost";//服務(wù)器地址    public static final int PORT = 8000;//服務(wù)器端口號     public static void main(String[] args) {      handler();    }    private static void handler(){     try {       //實例化一個Socket,并指定服務(wù)器地址和端口       Socket client = new Socket(IP, PORT);       //開啟兩個線程,一個負責讀,一個負責寫       new Thread(new ReadHandlerThread(client)).start();       new Thread(new WriteHandlerThread(client)).start();     } catch (Exception e) {       e.printStackTrace();     }   } }   /*  *處理讀操作的線程   */ class ReadHandlerThread implements Runnable{   private Socket client;    public ReadHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataInputStream dis = null;     try {       while(true){         //讀取服務(wù)器端數(shù)據(jù)          dis = new DataInputStream(client.getInputStream());         String receive = dis.readUTF();           System.out.println("服務(wù)器端返回過來的是: " + receive);        }     } catch (IOException e) {       e.printStackTrace();     } finally{       try {         if(dis != null){           dis.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } }  /*  * 處理寫操作的線程  */ class WriteHandlerThread implements Runnable{   private Socket client;    public WriteHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataOutputStream dos = null;     BufferedReader br = null;     try {       while(true){         //取得輸出流         dos = new DataOutputStream(client.getOutputStream());         System.out.print("請輸入: /t");          //鍵盤錄入         br = new BufferedReader(new InputStreamReader(System.in));         String send = br.readLine();          //發(fā)送數(shù)據(jù)         dos.writeUTF(send);        }     } catch (IOException e) {       e.printStackTrace();     } finally{       try{         if(dos != null){           dos.close();         }         if(br != null){           br.close();         }         if(client != null){           client = null;         }       }catch(Exception e){         e.printStackTrace();       }     }   } } 

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 保德县| 昌图县| 黄石市| 沙坪坝区| 栖霞市| 铜山县| 子长县| 北碚区| 贵溪市| 家居| 镇康县| 右玉县| 双辽市| 开封县| 苗栗市| 正镶白旗| 兴仁县| 墨江| 泸水县| 高要市| 福鼎市| 五原县| 葵青区| 吴旗县| 商水县| 大同市| 仲巴县| 平山县| 全椒县| 兴海县| 西乌珠穆沁旗| 红安县| 普兰店市| 黄浦区| 德兴市| 溧阳市| 龙门县| 长子县| 安图县| 含山县| 贺州市|