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

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

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

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

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

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();
  }
}

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

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

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

相關(guān)文章

  • Java最全文件操作實(shí)例匯總

    Java最全文件操作實(shí)例匯總

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

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

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

    java音樂播放器編寫源碼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論