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

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

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

在線咨詢:兩個(gè)人都可以是發(fā)送方,也可以是接收方,實(shí)現(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 方法通過(guò) implements 關(guān)鍵字實(shí)現(xiàn) Runnable 接口
 * 重寫方法快捷鍵:Ctrl + O
 */
public class TalkSend implements Runnable {

 DatagramSocket socket = null;
 BufferedReader reader = null;

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

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

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

   //準(zhǔn)備數(shù)據(jù):控制臺(tái)讀?。篠ystem.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);

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

  //關(guān)閉
  socket.close();

 }
}

聊天接收線程

package chat;

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

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

 DatagramSocket socket = null;

 private int port;
 private String msgFrom;

 //構(gòu)造
 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 {
    //準(zhǔn)備接收數(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);

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

  //關(guān)閉
  socket.close();

 }
}

學(xué)生端

package chat;

/**
 * 學(xué)生端
 */
public class TalkStudent {

 public static void main(String[] args) {

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

}

效果一覽

以上就是java實(shí)現(xiàn)的多線程實(shí)現(xiàn)在線咨詢(udp)的詳細(xì)內(nèi)容,更多關(guān)于java 在線咨詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot臨時(shí)屬性設(shè)置方法

    SpringBoot臨時(shí)屬性設(shè)置方法

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

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

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

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

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

    Intellij IDEA集成JProfiler性能分析工具

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

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

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

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

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

    使用SpringEvent解決WebUploader大文件上傳解耦問(wèn)題

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

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

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

    JS+Struts2多文件上傳實(shí)例詳解

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

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

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

最新評(píng)論

奎屯市| 陆良县| 深水埗区| 鹿泉市| 通化市| 沙坪坝区| 乌兰浩特市| 福安市| 家居| 喀喇沁旗| 包头市| 黔西县| 施秉县| 临泽县| 商南县| 江川县| SHOW| 米泉市| 大足县| 巫山县| 柘荣县| 赣榆县| 玛曲县| 宕昌县| 刚察县| 巫山县| 龙井市| 体育| 中方县| 遂平县| 唐海县| 枣阳市| 鸡泽县| 高密市| 银川市| 祁阳县| 呼和浩特市| 城固县| 连云港市| 尼木县| 保定市|