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

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í)候就表示斷開(kāi)連接
    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 端口接收消息
   *
   * 開(kāi)啟兩個(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 端口接收消息
   *
   * 開(kāi)啟兩個(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)文章

  • Java面試題目集錦

    Java面試題目集錦

    本文是小編日常收集整理的java面試題目,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集

    動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集

    該視頻由國(guó)內(nèi)知名講師王勇老師主講,適合掌握J(rèn)ava基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計(jì)292集,學(xué)習(xí)Java Web項(xiàng)目,DRP項(xiàng)目視頻是首選,累計(jì)下載量已經(jīng)達(dá)到上千萬(wàn),很多同學(xué)通過(guò)自學(xué)該視頻找到了軟件開(kāi)發(fā)工作
    2017-04-04
  • Java中的HashMap內(nèi)存泄漏問(wèn)題詳解

    Java中的HashMap內(nèi)存泄漏問(wèn)題詳解

    這篇文章主要介紹了Java中的HashMap內(nèi)存泄漏問(wèn)題詳解,WeakHashMap中的key是弱引用,如果再使用之后沒(méi)有及時(shí)remove掉這個(gè)key,那么當(dāng)GC時(shí)key就可能會(huì)被回收,導(dǎo)致key對(duì)應(yīng)的value對(duì)象占用的內(nèi)存無(wú)法回收進(jìn)而導(dǎo)致內(nèi)存泄漏,需要的朋友可以參考下
    2023-09-09
  • 帶你了解Java Maven的打包操作

    帶你了解Java Maven的打包操作

    這篇文章主要介紹了Maven打包的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java十道入門易踩坑題分析后篇

    Java十道入門易踩坑題分析后篇

    這篇文章總結(jié)分析了Java入門容易碰到的幾點(diǎn)易進(jìn)坑的題目,對(duì)于新手小白剛開(kāi)始學(xué)Java非常有益處,讓你少走避開(kāi)彎路,感興趣的朋友快來(lái)看看吧
    2022-01-01
  • Eclipse快速添加get、set方法的操作技巧

    Eclipse快速添加get、set方法的操作技巧

    這篇文章主要介紹了Eclipse快速添加get、set方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Java的JDBC和橋接模式詳解

    Java的JDBC和橋接模式詳解

    下面小編就為大家?guī)?lái)一篇Java的JDBC和橋接模式(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • Java 工具類總結(jié)目錄(分享)

    Java 工具類總結(jié)目錄(分享)

    下面小編就為大家?guī)?lái)一篇Java 工具類總結(jié)目錄(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳解Java中Iterator迭代器的用法

    詳解Java中Iterator迭代器的用法

    這篇文章主要介紹了Java中Iterator迭代器的用法,比較簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 使用Java生成JWT令牌的示例代碼

    使用Java生成JWT令牌的示例代碼

    json-web-token簡(jiǎn)稱java web令牌,也稱作JWT,是一種可以實(shí)現(xiàn)跨域身份驗(yàn)證身份的方案,jwt不加密傳輸數(shù)據(jù),但能夠通過(guò)數(shù)據(jù)前面驗(yàn)證數(shù)據(jù)的未被篡改,本文給大家介紹了如何使用Java生成JWT令牌,需要的朋友可以參考下
    2024-04-04

最新評(píng)論