日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaSocket實戰(zhàn)之二:多線程通信

上一篇文章說到怎樣寫一個最簡單的Java Socket通信,但是在上一篇文章中的例子有一個問題就是Server只能接受一個Client請求,當?shù)谝粋€Client連接后就占據(jù)了這個位置,后續(xù)Client不能再繼續(xù)連接,所以需要做些改動,當Server沒接受到一個Client連接請求之后,都把處理流程放到一個獨立的線程里去運行,然后等待下一個Client連接請求,這樣就不會阻塞Server端接收請求了。每個獨立運行的程序在使用完Socket對象之后要將其關閉。

成都創(chuàng)新互聯(lián)公司專注于榆中網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經驗。 熱誠為您提供榆中營銷型網(wǎng)站建設,榆中網(wǎng)站制作、榆中網(wǎng)頁設計、榆中網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務,打造榆中網(wǎng)絡公司原創(chuàng)品牌,更為您提供榆中網(wǎng)站排名全網(wǎng)營銷落地服務。

具體代碼如下:

 
 
 
  1. package com.googlecode.garbagecan.test.socket.sample2;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class MyServer {
  9.     public static void main(String[] args) throws IOException {
  10.         ServerSocket server = new ServerSocket(10000);
  11.         
  12.         while (true) {
  13.             Socket socket = server.accept();
  14.             invoke(socket);
  15.         }
  16.     }
  17.     
  18.     private static void invoke(final Socket client) throws IOException {
  19.         new Thread(new Runnable() {
  20.             public void run() {
  21.                 BufferedReader in = null;
  22.                 PrintWriter out = null;
  23.                 try {
  24.                     in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  25.                     out = new PrintWriter(client.getOutputStream());
  26.                     while (true) {
  27.                         String msg = in.readLine();
  28.                         System.out.println(msg);
  29.                         out.println("Server received " + msg);
  30.                         out.flush();
  31.                         if (msg.equals("bye")) {
  32.                             break;
  33.                         }
  34.                     }
  35.                 } catch(IOException ex) {
  36.                     ex.printStackTrace();
  37.                 } finally {
  38.                     try {
  39.                         in.close();
  40.                     } catch (Exception e) {}
  41.                     try {
  42.                         out.close();
  43.                     } catch (Exception e) {}
  44.                     try {
  45.                         client.close();
  46.                     } catch (Exception e) {}
  47.                 }
  48.             }
  49.         }).start();
  50.     }
  51. }

下面是Client程序代碼:

 
 
 
  1. package com.googlecode.garbagecan.test.socket.sample2;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6. public class MyClient {
  7.     public static void main(String[] args) throws Exception {
  8.         Socket socket = new Socket("localhost", 10000);
  9.         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  10.         PrintWriter out = new PrintWriter(socket.getOutputStream());
  11.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  12.         while (true) {
  13.             String msg = reader.readLine();
  14.             out.println(msg);
  15.             out.flush();
  16.             if (msg.equals("bye")) {
  17.                 break;
  18.             }
  19.             System.out.println(in.readLine());
  20.         }
  21.         socket.close();
  22.     }
  23. }

測試,首先運行MyServer類,然后運行兩個MyClient類,然后分別在每個MyClient的提示符下輸入字符串,就可以看到Server可以分別接收處理每個Client的請求了。


當前標題:JavaSocket實戰(zhàn)之二:多線程通信
文章鏈接:http://www.5511xx.com/article/dhcecse.html