最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 多線程實現(xiàn)在線咨詢(udp)

 更新時間:2020年11月21日 09:01:34   作者:Hateyes  
這篇文章主要介紹了java 多線程實現(xiàn)在線咨詢(udp)的示例,幫助大家更好的理解和學習Java 網(wǎng)絡編程的相關內容,感興趣的朋友可以了解下

在線咨詢:兩個人都可以是發(fā)送方,也可以是接收方,實現(xiàn)網(wǎng)上在線咨詢正常通信。

聊天發(fā)送線程

package chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * 聊天發(fā)送線程:
 * 重寫 run 方法通過 implements 關鍵字實現(xiàn) Runnable 接口
 * 重寫方法快捷鍵:Ctrl + O
 */
public class TalkSend implements Runnable {

 DatagramSocket socket = null;
 BufferedReader reader = null;

 private int fromPort; //從哪個端口
 private String toIP; //到哪個地址
 private int toPort; //到哪個端口

 //構造:Alt + Insert
 public TalkSend(int fromPort, String toIP, int toPort) {
  this.fromPort = fromPort;
  this.toIP = toIP;
  this.toPort = toPort;

  //快捷鍵:Ctrl + Alt + T
  try {
   //構造一個數(shù)據(jù)報套接字并將其綁定到本地主機上的指定端口
   socket = new DatagramSocket(fromPort);

   //準備數(shù)據(jù):控制臺讀取:System.in
   reader = new BufferedReader(new InputStreamReader(System.in));
  } catch (SocketException e) {
   e.printStackTrace();
  }
 }

 @Override
 public void run() {

  while (true){
   try {
    String data = reader.readLine();
    byte[] dataBytes = data.getBytes();
    DatagramPacket packet = new DatagramPacket(dataBytes, 0 , dataBytes.length, new InetSocketAddress(this.toIP, this.toPort));

    //發(fā)送數(shù)據(jù)包
    socket.send(packet);

    //當發(fā)送一句 bye 的時候表示結束發(fā)送
    if (data.equals("bye")){
     break;
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  //關閉
  socket.close();

 }
}

聊天接收線程

package chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 聊天接收線程:
 * 重寫 run 方法通過 implements 關鍵字實現(xiàn) Runnable 接口
 * 重寫方法快捷鍵:Ctrl + O
 */
public class TalkReceive implements Runnable {

 DatagramSocket socket = null;

 private int port;
 private String msgFrom;

 //構造
 public TalkReceive(int port, String msgFrom) {
  this.port = port;
  this.msgFrom = msgFrom;

  try {
   socket = new DatagramSocket(port);
  } catch (SocketException e) {
   e.printStackTrace();
  }
 }

 @Override
 public void run() {

  while (true){
   try {
    //準備接收數(shù)據(jù)包
    byte[] container = new byte[1024];
    DatagramPacket packet = new DatagramPacket(container, 0, container.length);

    //接收數(shù)據(jù)包
    socket.receive(packet); //阻塞式接收包裹

    //讀取數(shù)據(jù)
    byte[] data = packet.getData();

    String receiveData = new String(data, 0, data.length);

    //接收到的數(shù)據(jù)
    System.out.println(msgFrom + ":" + receiveData);

    //當我們說一聲 bye 的時候就表示斷開連接
    if (receiveData.equals("bye")){
     break;
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  //關閉
  socket.close();

 }
}

學生端

package chat;

/**
 * 學生端
 */
public class TalkStudent {

 public static void main(String[] args) {

  /**
   * 學生端
   * 從 7777 端口發(fā)送消息
   * 發(fā)送消息到 9999 端口
   * 從 8888 端口接收消息
   *
   * 開啟兩個線程:
   * new TalkSend:從 77777 端口發(fā)送,發(fā)送到 localhost,發(fā)送給 9999 端口
   * @param fromPort
   * @param toIP
   * @param toPort
   *
   * new TalkReceive:從 8888 端口接收,接收來自 “老師” 的消息
   * @param port
   * @param msgFrom
   *
   * 使用了一種模式:靜態(tài)代理模式
   */
  new Thread(new TalkSend(7777, "localhost", 9999)).start();
  new Thread(new TalkReceive(8888, "老師")).start();
 }

}

老師端

package chat;

/**
 * 老師端
 */
public class TalkTeacher {

 public static void main(String[] args) {

  /**
   * 老師端
   * 從 5555 端口發(fā)送消息
   * 發(fā)送消息到 8888 端口
   * 從 9999 端口接收消息
   *
   * 開啟兩個線程:
   * new TalkSend:從 5555 端口發(fā)送,發(fā)送到 localhost,發(fā)送給 8888 端口
   * @param fromPort
   * @param toIP
   * @param toPort
   *
   * new TalkReceive:從 9999 端口接收,接收來自 “學生” 的消息
   * @param port
   * @param msgFrom
   *
   * 使用了一種模式:靜態(tài)代理模式
   */
  new Thread(new TalkSend(5555, "localhost", 8888)).start();
  new Thread(new TalkReceive(9999, "學生")).start();
 }

}

效果一覽

以上就是java實現(xiàn)的多線程實現(xiàn)在線咨詢(udp)的詳細內容,更多關于java 在線咨詢的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:

相關文章

  • SpringBoot臨時屬性設置方法

    SpringBoot臨時屬性設置方法

    這篇文章主要介紹了SpringBoot臨時屬性設置方法,SpringBoot工程可以基于java環(huán)境獨立進行jar文件啟動服務,文中給大家提到了命令行啟動常見問題以及解決方案,需要的朋友可以參考下
    2022-09-09
  • Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    這篇文章主要介紹了Java二叉搜索樹遍歷操作,結合實例形式詳細分析了Java二叉搜索樹前序、中序、后序、層次、廣度優(yōu)先遍歷等相關原理與操作技巧,需要的朋友可以參考下
    2020-03-03
  • Java實現(xiàn)將列表數(shù)據(jù)導出為PDF文件并添加水印

    Java實現(xiàn)將列表數(shù)據(jù)導出為PDF文件并添加水印

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)把列表數(shù)據(jù)導出為PDF文件,同時加上PDF水印,文中的示例代碼講解詳細,需要的可以參考下
    2024-02-02
  • Intellij IDEA集成JProfiler性能分析工具

    Intellij IDEA集成JProfiler性能分析工具

    作為Java程序員,性能分析是我們必須掌握的技能之一,在性能分析中,JProfiler是一款非常強大的工具,本文就來介紹一下Intellij IDEA集成JProfiler性能分析工具,就有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • java使用wait()和notify()線程間通訊的實現(xiàn)

    java使用wait()和notify()線程間通訊的實現(xiàn)

    Java 線程通信是將多個獨立的線程個體進行關聯(lián)處理,使得線程與線程之間能進行相互通信,本文就介紹了java使用wait()和notify()線程間通訊的實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • Fluent Mybatis讓你擺脫Xml文件的技巧

    Fluent Mybatis讓你擺脫Xml文件的技巧

    Fluent-Mybatis類似于Mybatis-Plus是對Mybatis進一步的封裝,可以只用一個實體類對象,通過代碼生成器,在編譯的過程中生成所需要的各類文件,簡化了項目的基礎構建,提高開發(fā)效率,本文重點給大家介紹Fluent Mybaits讓你擺脫Xml文件的技巧,一起看看吧
    2021-08-08
  • 使用SpringEvent解決WebUploader大文件上傳解耦問題

    使用SpringEvent解決WebUploader大文件上傳解耦問題

    Spring Event是Spring框架內建的一種發(fā)布/訂閱模式的實現(xiàn),它允許應用內部不同組件之間通過事件進行通信,本文以WebUploader大文件上傳組件為例,在大文件處理的場景中使用SpringEvent的事件發(fā)布機制,靈活的擴展對文件的處理需求,需要的朋友可以參考下
    2024-07-07
  • java對接Modbus協(xié)議代碼示例

    java對接Modbus協(xié)議代碼示例

    Modbus是一種串行通信協(xié)議,Modbus已經(jīng)成為工業(yè)領域通信協(xié)議的業(yè)界標準,并且現(xiàn)在是工業(yè)電子設備之間常用的連接方式,這篇文章主要給大家介紹了關于java對接Modbus協(xié)議的相關資料,需要的朋友可以參考下
    2024-03-03
  • JS+Struts2多文件上傳實例詳解

    JS+Struts2多文件上傳實例詳解

    這篇文章主要為大家詳細介紹了JS+Struts2多文件上傳實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java序列化反序列化原理及漏洞解決方案

    Java序列化反序列化原理及漏洞解決方案

    這篇文章主要介紹了Java序列化反序列化原理及漏洞解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論

壶关县| 民丰县| 平邑县| 新巴尔虎右旗| 林口县| 从化市| 广南县| 石楼县| 滦平县| 建湖县| 武城县| 沅江市| 泰安市| 德格县| 东安县| 咸阳市| 讷河市| 广德县| 长葛市| 漳浦县| 洪洞县| 墨江| 同德县| 镇康县| 盐亭县| 弋阳县| 星子县| 绥芬河市| 黎城县| 申扎县| 资中县| 太和县| 苏尼特左旗| 平南县| 藁城市| 瓮安县| 丰城市| 宜兰市| 咸丰县| 湘西| 龙山县|