欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Socket實現(xiàn)多線程通信功能示例

 更新時間:2017年06月22日 08:23:59   作者:kongxx  
這篇文章主要介紹了Java Socket實現(xiàn)多線程通信功能,結(jié)合具體實例形式較為詳細的分析了java多線程通信的原理及客戶端、服務器端相應實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Java Socket實現(xiàn)多線程通信功能的方法。分享給大家供大家參考,具體如下:

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

package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
  public static void main(String[] args) throws IOException {
    ServerSocket server = new ServerSocket(10000);
    while (true) {
      Socket socket = server.accept();
      invoke(socket);
    }
  }
  private static void invoke(final Socket client) throws IOException {
    new Thread(new Runnable() {
      public void run() {
        BufferedReader in = null;
        PrintWriter out = null;
        try {
          in = new BufferedReader(new InputStreamReader(client.getInputStream()));
          out = new PrintWriter(client.getOutputStream());
          while (true) {
            String msg = in.readLine();
            System.out.println(msg);
            out.println("Server received " + msg);
            out.flush();
            if (msg.equals("bye")) {
              break;
            }
          }
        } catch(IOException ex) {
          ex.printStackTrace();
        } finally {
          try {
            in.close();
          } catch (Exception e) {}
          try {
            out.close();
          } catch (Exception e) {}
          try {
            client.close();
          } catch (Exception e) {}
        }
      }
    }).start();
  }
}

下面是Client程序代碼:

package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyClient {
  public static void main(String[] args) throws Exception {
    Socket socket = new Socket("localhost", 10000);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter out = new PrintWriter(socket.getOutputStream());
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    while (true) {
      String msg = reader.readLine();
      out.println(msg);
      out.flush();
      if (msg.equals("bye")) {
        break;
      }
      System.out.println(in.readLine());
    }
    socket.close();
  }
}

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

更多關于java相關內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • Java最全文件操作實例匯總

    Java最全文件操作實例匯總

    這篇文章主要介紹了Java最全文件操作,總結(jié)分析了大量實例,詳細匯總了Java針對文件的各種常用操作,需要的朋友可以參考下
    2015-11-11
  • Spring注解 TX聲明式事務實現(xiàn)過程解析

    Spring注解 TX聲明式事務實現(xiàn)過程解析

    這篇文章主要介紹了Spring注解 - TX 聲明式事務實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java音樂播放器編寫源碼

    java音樂播放器編寫源碼

    這篇文章主要為大家詳細介紹了java音樂播放器的編寫源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺談java中字節(jié)與字符的區(qū)別

    淺談java中字節(jié)與字符的區(qū)別

    這篇文章主要介紹了淺談java中字節(jié)與字符的區(qū)別,字節(jié)是java中的基本數(shù)據(jù)類型,用來申明字節(jié)型的變量;字符是語義上的單位,它是有編碼的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Spring整合TimerTask實現(xiàn)定時任務調(diào)度

    Spring整合TimerTask實現(xiàn)定時任務調(diào)度

    這篇文章主要介紹了Spring整合TimerTask實現(xiàn)定時任務調(diào)度的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java實現(xiàn)的對稱加密算法AES定義與用法詳解

    Java實現(xiàn)的對稱加密算法AES定義與用法詳解

    這篇文章主要介紹了Java實現(xiàn)的對稱加密算法AES,結(jié)合實例形式分析了對稱加密算法AES的定義、特點、用法及使用場景,需要的朋友可以參考下
    2018-04-04
  • Java的Flowable工作流之加簽轉(zhuǎn)簽詳解

    Java的Flowable工作流之加簽轉(zhuǎn)簽詳解

    這篇文章主要介紹了Java的Flowable工作流之加簽轉(zhuǎn)簽詳解,Flowable是一個開源的工作流引擎,它提供了一套強大的工具和功能,用于設計、執(zhí)行和管理各種類型的工作流程,需要的朋友可以參考下
    2023-11-11
  • Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    最近做項目遇到這樣的需求,天、小時、分鐘、秒的數(shù)值都是隔開的,服務器端只返回一個時間戳長度,怎么實現(xiàn)這樣的功能呢?下面小編給大家?guī)砹薐ava 實現(xiàn)倒計時功能的方案,需要的朋友參考下吧
    2018-01-01
  • SpringBoot整合websocket實現(xiàn)即時通信聊天

    SpringBoot整合websocket實現(xiàn)即時通信聊天

    這篇文章主要介紹了SpringBoot整合websocket實現(xiàn)即時通信聊天,實時通信是一個實時通信系統(tǒng),允許兩人或多人使用網(wǎng)絡實時的傳遞文字消息、文件、語音與視頻交流,需要的朋友可以參考下
    2022-05-05
  • Java利用SPI實現(xiàn)解耦的示例詳解

    Java利用SPI實現(xiàn)解耦的示例詳解

    SPI的全稱是服務提供接口,可以用其來啟動框架的擴展和替換組件。本文將利用SPI實現(xiàn)解耦,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-04-04

最新評論