java代碼實現socket介面通訊(堵塞I/O)

來源:互聯網
上載者:User

標籤:accept   高並發   實現   客戶   tac   處理   except   end   並發   

   傳統的java實現socket通訊比較簡單實現,不過它屬於堵塞式的I/O流存取,只能由一個線程完成當前任務才能起下個一個線程,無法解決高並發;

  1、簡單的socketservice

對每一個Socket串連建立一個Handler處理線程,處理線程對inputstream流中的資料進行相應的處理後,將處理結果通過PrintWriter發送給用戶端,在最後需要關閉輸入資料流、輸出資料流和socket通訊端控制代碼資源。

 1 public class TimeServer { 2  3     public static void main(String[] args) throws IOException { 4  5        int port = 8080;//server 連接埠採用8080 6        ServerSocket server = null; 7        Socket socket = null; 8        try { 9            server = new ServerSocket(port);10            while(true){11                socket = server.accept();12                new Thread(new TimeHandler(socket)).start();13            }14        } catch (Exception e) {15           e.printStackTrace();16        }finally{17            if(server!=null){18                server.close();19                server =null;20                System.out.println("the time server close...");21            }22        }23     }24 25 }26 27 class TimeHandler implements Runnable{28 29     private Socket socket;30 31     public TimeHandler(){32 33     }34     public TimeHandler(Socket socket){35         this();36         this.socket = socket;37     }38 39     public void run() {40         System.out.println(Thread.currentThread().getName()+" start success...");41         BufferedReader in = null;42         PrintWriter out = null;43         try {44             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));45             out = new PrintWriter(socket.getOutputStream(),true);46             while(true){47                 String str = in.readLine();48                 if("end".equals(str)){49                     break;50                 }51                 String time = str+":"+System.currentTimeMillis();52                 out.println(time);53             }54         } catch (Exception e) {55              e.printStackTrace();56         }finally{57             if(in!=null){58                 try {59                     in.close();60                 } catch (IOException e) {61                     e.printStackTrace();62                 }63                 in = null;64             }65             if(out!=null){66                 out.close();67                 out= null;68             }69             if(socket!=null){70                 try {71                     socket.close();72                 } catch (IOException e) {73                     e.printStackTrace();74                 }75                 socket =null;76             }77         }78 79     }80 }

2、socketclient

 1 public class TimeClient { 2  3     public static void main(String[] args) { 4         int port = 8080; 5         Socket socket = null; 6         BufferedReader in =null; 7         PrintWriter out =null; 8  9         try {10             socket = new Socket("127.0.0.1", port);11             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));12             out = new PrintWriter(socket.getOutputStream(),true);13             out.println("hello");14             out.println("world");15             out.println("end");16 17             System.out.println("send message success...");18             while(true){19                 String res = in.readLine();20                 if("".equals(res)||res==null){21                     break;22                 }23                 System.out.println("the res is:"+res);24             }25 26 27         } catch (Exception e) {28             e.printStackTrace();29         }finally{30             if(in!=null){31                 try {32                     in.close();33                 } catch (IOException e) {34                     e.printStackTrace();35                 }36                 in = null;37             }38             if(out!=null){39                 out.close();40                 out= null;41             }42             if(socket!=null){43                 try {44                     socket.close();45                 } catch (IOException e) {46                     e.printStackTrace();47                 }48                 socket =null;49             }50         }51 52     }53 54 }

 

java代碼實現socket介面通訊(堵塞I/O)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.