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

java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼

 更新時(shí)間:2021年01月18日 09:39:36   作者:中二病沒(méi)有蛀牙  
這篇文章主要介紹了java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

題目:
假設(shè)Tom和Jerry利用Java UDP進(jìn)行聊天,請(qǐng)為他們編寫程序。具體如下:
(1)、Tom和Jerry聊天的雙方都應(yīng)該具有發(fā)送端和接收端;
(2)、利用DatagramSocket與DatagramPacket;
(3)、實(shí)現(xiàn) java.lang.Runnable類,重寫 run()方法。

在這里插入圖片描述

學(xué)過(guò)計(jì)網(wǎng)的都知道,利用三元組(ip地址,協(xié)議,端口)就可以標(biāo)識(shí)網(wǎng)絡(luò)的進(jìn)程了。
而進(jìn)行通信我們直接運(yùn)用socket就可以了,首先需要知道是socket是什么,這部分可以參考這個(gè)大佬寫的博客。
http://m.fzitv.net/article/121601.htm
實(shí)現(xiàn)一個(gè)客戶端,那么需要Tom和Jerry都可以實(shí)現(xiàn)接收和發(fā)送功能,分別用兩個(gè)線程啟動(dòng)。

接收線程Receive_Thread.java

package Chat_UDP;

import java.io.IOException;
import java.util.Date;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.text.SimpleDateFormat;

public class Receive_Thread extends Thread {
 private static final int MAX_RECEIVE_BUFFER = 1024;
 private DatagramSocket server;
 private DatagramPacket packet;
 byte[] buffer = new byte[MAX_RECEIVE_BUFFER];
 
 public Receive_Thread(DatagramSocket server)
 {
  this.server = server;
  packet = new DatagramPacket(buffer, buffer.length);
 }
 
 @Override
 public void run() {
  try
  {
   while(true)
   {
    //接收數(shù)據(jù)包
    server.receive(packet);
    String s = new String(packet.getData(),packet.getOffset(),packet.getLength(),"UTF-8");
    Date day=new Date(); 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    if(packet.getPort() == 10001)
    	System.out.println("Tom"+packet.getAddress()+" 說(shuō):"+s+"\t"+df.format(day));
    else{
    	System.out.println("Jerry"+packet.getAddress()+" 說(shuō) :"+s+"\t"+df.format(day));
    }
    packet.setLength(buffer.length);
   }
  }
  catch(IOException e)
  {
   System.out.println("IOException");
  }
 }
}

發(fā)送線程Send_Thread.java

package Chat_UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Scanner;

public class Send_Thread extends Thread{
 //發(fā)送的socket端
 private DatagramSocket sender = null;
 //待發(fā)送的目標(biāo)地址
 private InetSocketAddress address = null;
 //從鍵盤輸入
 Scanner scan = new Scanner(System.in);
 public Send_Thread(DatagramSocket sender,InetSocketAddress address)
 {
  this.sender = sender;
  this.address = address;
 }
 
 @Override
 public void run() {
  // TODO Auto-generated method stub
  try
  {
   while(true)
   {
    //輸入待發(fā)送的內(nèi)容
    String input = scan.nextLine();
    if(input.equals("exit"))
     break;
    byte[] data = null;
    data = input.getBytes("UTF-8");
    //創(chuàng)建UDP數(shù)據(jù)報(bào)
    DatagramPacket pack = new DatagramPacket(data, data.length,address);
    sender.send(pack); 
   }
   System.out.println("Exit!");
   
  }catch(IOException e)
  {
   System.out.println("IOException");
  }
 }

}

聊天服務(wù)器
Chat_Server.java

package Chat_UDP;
//楊麗冰 201831064402
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class Chat_Server {

 private static final int DEST_PORT = 8888;
 private static final int SEND_PORT = 10001;
 private static final int RECE_PORT = 9000;
 private static final String IP = "127.0.0.1";

 public static void main(String[] args)
 {
  try{
   Send_Thread send_thread = null;
   Receive_Thread rece_thread = null;
   InetSocketAddress address = null;
   //創(chuàng)建待接受數(shù)據(jù)包的目的機(jī)的端口號(hào)和IP地址
   address = new InetSocketAddress(IP, DEST_PORT);
   //創(chuàng)建發(fā)送的Socket端
   DatagramSocket sendsocket = new DatagramSocket(SEND_PORT);
   //創(chuàng)建接受的Socket端
   DatagramSocket recesocket = new DatagramSocket(RECE_PORT);
   //發(fā)送線程建立
   send_thread = new Send_Thread(sendsocket, address);
   //接受線程的建立
   rece_thread = new Receive_Thread(recesocket);
   send_thread.start();
   rece_thread.start();
  }catch(Exception e)
  {
   System.out.println("Exception!");
  }

 }

}

聊天客戶端 Chat_Client.java

package Chat_UDP;
//楊麗冰 201831064402
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class Chat_Client {
	//聲明端口號(hào)
 private static final int DEST_PORT = 9000;
 private static final int SEND_PORT = 10000;
 private static final int RECE_PORT = 8888;
 private static final String IP = "127.0.0.1";

 public static void main(String[] args)
 {
  try{
   Send_Thread send_thread = null;
   Receive_Thread rece_thread = null;
   InetSocketAddress address = null;
   //創(chuàng)建待接受數(shù)據(jù)包的目的機(jī)的端口號(hào)和IP地址
   address = new InetSocketAddress(IP, DEST_PORT);
   //創(chuàng)建發(fā)送的Socket端
   DatagramSocket sendsocket = new DatagramSocket(SEND_PORT);
   //創(chuàng)建接受的Socket端
   DatagramSocket recesocket = new DatagramSocket(RECE_PORT);
   //發(fā)送線程建立
   send_thread = new Send_Thread(sendsocket, address);
   //接受線程的建立
   rece_thread = new Receive_Thread(recesocket);
   send_thread.start();
   rece_thread.start();

  }catch(Exception e)
  {
   System.out.println("Exception!");
  }

 }

}

需要注意的時(shí)候運(yùn)行的時(shí)候需要同時(shí)運(yùn)行聊天服務(wù)器和客戶端,才能夠正常運(yùn)行。
最終效果如下:

在這里插入圖片描述
在這里插入圖片描述

到此這篇關(guān)于java UDP實(shí)現(xiàn)一個(gè)聊天工具的文章就介紹到這了,更多相關(guān)java UDP聊天工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 快速上手Java中的Properties集合類

    快速上手Java中的Properties集合類

    java.util.Properties集合繼承于Hashtable,來(lái)表示一個(gè)持久的屬性集,他使用鍵值結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),每個(gè)鍵及其對(duì)應(yīng)的值都是一個(gè)字符串,該類被許多java類使用,下面這篇文章主要給大家介紹了關(guān)于如何快速上手Java中Properties集合類的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Java深入分析動(dòng)態(tài)代理

    Java深入分析動(dòng)態(tài)代理

    動(dòng)態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時(shí)候確定的,客戶通過(guò)代理類來(lái)調(diào)用目標(biāo)對(duì)象的方法,是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建目標(biāo)類的代理對(duì)象。本文將通過(guò)案例詳細(xì)講解一下Java動(dòng)態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • SpringCloud集成Sleuth和Zipkin的思路講解

    SpringCloud集成Sleuth和Zipkin的思路講解

    Zipkin 是 Twitter 的一個(gè)開(kāi)源項(xiàng)目,它基于 Google Dapper 實(shí)現(xiàn),它致力于收集服務(wù)的定時(shí)數(shù)據(jù),以及解決微服務(wù)架構(gòu)中的延遲問(wèn)題,包括數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn),這篇文章主要介紹了SpringCloud集成Sleuth和Zipkin,需要的朋友可以參考下
    2022-11-11
  • springboot集成spring cache緩存示例代碼

    springboot集成spring cache緩存示例代碼

    本篇文章主要介紹了springboot集成spring cache示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • IDEA消除指定警告的兩種方法小結(jié)

    IDEA消除指定警告的兩種方法小結(jié)

    有時(shí)候IDEA會(huì)代碼中給出一些我們不需要的警告,看起來(lái)就很不美觀,本文主要介紹了IDEA消除指定警告的兩種方法,感興趣的可以了解一下
    2023-08-08
  • ActiveMQ消息隊(duì)列技術(shù)融合Spring過(guò)程解析

    ActiveMQ消息隊(duì)列技術(shù)融合Spring過(guò)程解析

    這篇文章主要介紹了ActiveMQ消息隊(duì)列技術(shù)融合Spring過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • MyBatis實(shí)現(xiàn)萬(wàn)能Map和模糊查詢

    MyBatis實(shí)現(xiàn)萬(wàn)能Map和模糊查詢

    本文主要介紹了MyBatis實(shí)現(xiàn)萬(wàn)能Map和模糊查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 如何使用 IntelliJ IDEA 編寫 Spark 應(yīng)用程序(Scala + Maven)

    如何使用 IntelliJ IDEA 編寫 Spark 應(yīng)用程序(Sc

    本教程展示了如何在IntelliJIDEA中使用Maven編寫和運(yùn)行一個(gè)簡(jiǎn)單的Spark應(yīng)用程序(例如WordCount程序),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 如何從Java環(huán)境中調(diào)用GoLang函數(shù)

    如何從Java環(huán)境中調(diào)用GoLang函數(shù)

    Go,常被稱為GoLang,Go語(yǔ)言憑借其豐富的標(biāo)準(zhǔn)庫(kù),以及 goroutines和 channels等獨(dú)特特性,在開(kāi)發(fā)可擴(kuò)展且高效的程序方面展現(xiàn)了顯著優(yōu)勢(shì),許多開(kāi)發(fā)者傾向于將Go與其他編程語(yǔ)言結(jié)合使用,在本文中,我們將深入探討如何從Java環(huán)境中調(diào)用GoLang函數(shù),以實(shí)現(xiàn)兩種語(yǔ)言的無(wú)縫集成
    2025-01-01
  • java數(shù)據(jù)庫(kù)連接池新手入門一篇就夠了,太簡(jiǎn)單了!

    java數(shù)據(jù)庫(kù)連接池新手入門一篇就夠了,太簡(jiǎn)單了!

    數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆](méi)有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏,這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能
    2021-06-06

最新評(píng)論

红安县| 台南县| 习水县| 丰都县| 迁西县| 海兴县| 太仆寺旗| 东方市| 桃园市| 娄底市| 绥阳县| 陇西县| 启东市| 来凤县| 马龙县| 昭平县| 嘉兴市| 肇州县| 达拉特旗| 大足县| 永安市| 海城市| 扎兰屯市| 新和县| 汶川县| 新安县| 东丽区| 双柏县| 阳新县| 宜城市| 南平市| 文安县| 长顺县| 吉首市| 曲阳县| 屯门区| 嘉祥县| 项城市| 津南区| 宜丰县| 仲巴县|