国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 惠安县| 亳州市| 海伦市| 西平县| 什邡市| 固始县| 琼中| 固原市| 邵东县| 鄂州市| 时尚| 张北县| 老河口市| 鄂温| 咸宁市| 古交市| 卢龙县| 西峡县| 中西区| 锦屏县| 木兰县| 河北省| 通榆县| 宁德市| 社会| 朔州市| 赫章县| 亚东县| 来凤县| 建德市| 集贤县| 双江| 冷水江市| 故城县| 沙湾县| 郑州市| 十堰市| 临武县| 左权县| 丰都县| 南澳县|