JAVA BIO 服务器与客户端实现示例
生活随笔
收集整理的這篇文章主要介紹了
JAVA BIO 服务器与客户端实现示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼只兼容JAVA 7及以上版本。
服務器端代碼:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | package?com.stevex.app.bio; import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStreamReader; import?java.io.PrintWriter; import?java.net.ServerSocket; import?java.net.Socket; import?javax.net.ServerSocketFactory; public?class?XiaoNa?{ ????public?static?void?main(String[]?args){ ????????XiaoNa?xiaona?=?new?XiaoNa(); ????????? ????????ServerSocket?serverSocket?=?null; ????????Socket?socket?=?null; ????????try?{ ????????????//可以設置客戶連接請求隊列的長度,比如5,隊列長度超過5后拒絕連接請求 ????????????//serverSocket?=?ServerSocketFactory.getDefault().createServerSocket(8383,?5);?????? ????????????serverSocket?=?ServerSocketFactory.getDefault().createServerSocket(8383); ????????????? ????????????while(true){ ????????????????try{ ????????????????????//監聽直到接受連接后返回一個新Socket對象 ????????????????????socket?=?serverSocket.accept();//阻塞 ????????????????????//new一個線程處理連接請求 ????????????????????new?Thread(xiaona.new?Worker(socket)).start();; ????????????????} ????????????????catch?(Throwable?e)?{????//防止發生異常搞死服務器?????????? ????????????????????e.printStackTrace(); ????????????????}?????????????? ????????????}?????????? ????????}?catch?(IOException?e)?{?????????????? ????????????e.printStackTrace(); ????????} ????????finally{??????????????? ????????????try?{????????????? ????????????????if(socket?!=?null){ ????????????????????socket.close(); ????????????????} ????????????}?catch?(IOException?e)?{ ????????????????e.printStackTrace(); ????????????}?? ????????} ????} ????? ????private?static?String?getAnswer(String?question){ ????????String?answer?=?null; ????????? ????????switch(question){ ????????case?"who": ????????????answer?=?"我是小娜"; ????????????break; ????????case?"what": ????????????answer?=?"我是來幫你解悶的"; ????????????break; ????????case?"where": ????????????answer?=?"我來自外太空"; ????????????break; ????????default: ????????????????answer?=?"請輸入?who,?或者what,?或者where"; ????????} ????????? ????????return?answer; ????} ????? ????private?class?Worker?implements?Runnable{ ????????private?Socket?socket; ????????? ????????public?Worker(Socket?socket){ ????????????this.socket?=?socket; ????????} ????????? ????????@Override ????????public?void?run()?{ ????????????BufferedReader?reader?=?null; ????????????PrintWriter?writer?=?null; ????????????? ????????????try?{ ????????????????reader?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); ????????????? ????????????????writer?=?new?PrintWriter(socket.getOutputStream()); ????????????????? ????????????????String?question?=?reader.readLine();//沒有內容會阻塞 ????????????????? ????????????????while(!question.equals("OVER")){ ????????????????????String?answer?=?getAnswer(question); ????????????????????writer.println(answer); ????????????????????question?=?reader.readLine(); ????????????????} ????????????????? ????????????????writer.println("OVER");//OVER作為操作完成暗號 ????????????????writer.flush(); ????????????????? ????????????????if(writer?!=?null){ ????????????????????writer.close(); ????????????????} ????????????????????????????????????? ????????????????if(reader?!=?null){ ????????????????????reader.close(); ????????????????} ????????????}?catch?(IOException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????} ????????? ????} } |
客戶端代碼:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | package?com.stevex.app.bio; import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStreamReader; import?java.io.PrintWriter; import?java.net.Socket; public?class?Client?{ ????public?static?void?main(String[]?args)?{ ????????Client?c?=?new?Client(); ????????? ????????//種20個線程發起Socket客戶端連接請求 ????????for(int?i=0;?i<20;?i++){ ????????????new?Thread(c.new?Worker()).start(); ????????}?????? ????} ????? ????private?class?Worker?implements?Runnable{ ????????@Override ????????public?void?run()?{ ????????????Socket?socket?=?null; ????????????BufferedReader?reader?=?null; ????????????PrintWriter?writer?=?null; ????????????try?{ ????????????????//創建一個Socket并連接到指定的目標服務器 ????????????????socket?=?new?Socket("localhost",?8383); ????????????????reader?=?new?BufferedReader(new?InputStreamReader( ????????????????????????socket.getInputStream())); ????????????????writer?=?new?PrintWriter(socket.getOutputStream()); ????????????????writer.println("who"); ????????????????writer.println("what"); ????????????????writer.println("where"); ????????????????writer.println("OVER");//OVER作為操作完成暗號 ????????????????writer.flush(); ????????????????String?answer?=?reader.readLine();???//沒有內容會阻塞?????? ????????????????while(!?answer.equals("OVER")){??????????????? ????????????????????System.out.println(Thread.currentThread().getId()?+?"---Message?from?server:"?+?answer); ????????????????????answer?=?reader.readLine(); ????????????????} ????????????}?catch?(IOException?e)?{ ????????????????e.printStackTrace(); ????????????}?finally?{ ????????????????try?{ ????????????????????if?(writer?!=?null)?{ ????????????????????????writer.close(); ????????????????????} ????????????????????if?(reader?!=?null)?{ ????????????????????????reader.close(); ????????????????????} ????????????????????if?(socket?!=?null)?{ ????????????????????????socket.close(); ????????????????????} ????????????????}?catch?(IOException?e)?{ ????????????????????e.printStackTrace(); ????????????????} ????????????} ????????} ????????? ????} } |
? ? ?本文轉自sarchitect 51CTO博客,原文鏈接:http://blog.51cto.com/stevex/1581093,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的JAVA BIO 服务器与客户端实现示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scikit-learn K近邻法类库使
- 下一篇: 你不知道的javascript事件