亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java基于UDP實(shí)現(xiàn)在線聊天功能

 更新時(shí)間:2022年09月15日 14:29:01   作者:春風(fēng)依楊柳  
這篇文章主要為大家詳細(xì)介紹了java基于UDP實(shí)現(xiàn)在線聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java基于UDP實(shí)現(xiàn)在線聊天的具體代碼,供大家參考,具體內(nèi)容如下

效果圖:

一、學(xué)習(xí)UDP的簡(jiǎn)單使用步驟

接收端:

DatagramSocket socket = null;
? ? ? ? try {
? ? ? ? ? ? //1.開啟自己的端口(客戶端連接的端口)
? ? ? ? ? ? socket = new DatagramSocket(9999);
? ? ? ? ? ? //2.接收數(shù)據(jù)
? ? ? ? ? ? byte[] buffer = new byte[1024];
? ? ? ? ? ? DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
? ? ? ? ? ? socket.receive(packet);//堵塞接收
? ? ? ? ? ? //3.處理數(shù)據(jù)
? ? ? ? ? ? byte[] target = packet.getData();
? ? ? ? ? ? int len=0;
? ? ? ? ? ? if (target.length!=0){
? ? ? ? ? ? ? ? for (int i=0;i<target.length;i++){
? ? ? ? ? ? ? ? ? ? if (target[i]=='\0'){
? ? ? ? ? ? ? ? ? ? ? ? len=i;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }

? ? ? ? ? ? }
? ? ? ? ? ? //4.輸出數(shù)據(jù)
? ? ? ? ? ? System.out.println("from:"+packet.getAddress());
? ? ? ? ? ? System.out.println(new String(target,0,len));

? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? if (socket!=null){
? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? }
? ? ? ? }

發(fā)送端:

//1.建立連接
DatagramSocket socket = null;
//2.獲得連接對(duì)象
//獲取對(duì)方的IP和端口號(hào)進(jìn)行連接
?InetAddress Ip = null;
?int port = 9999;
//4.創(chuàng)建數(shù)據(jù)包
? ? ? ? String msg = "你好";
? ? ? ? DatagramPacket packet = null;
? ? ? ? try {
? ? ? ? ? ? socket = new DatagramSocket();
? ? ? ? ? ? Ip = InetAddress.getByName("localhost");
? ? ? ? ? ? //數(shù)據(jù),數(shù)據(jù)的長(zhǎng)度起始,發(fā)送的地址
? ? ? ? ? ? packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,Ip,port);
? ? ? ? ? ? //5.發(fā)送包
? ? ? ? ? ? socket.send(packet);

? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? //6.關(guān)閉資源
? ? ? ? ? ? if (socket != null){
? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? }
? ? ? ? }

二、多線程實(shí)現(xiàn)UDP在線聊天

1.創(chuàng)鍵服務(wù)器端

package chat;

import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;

public class ServerThread implements Runnable{
? ? private final String theOther;//對(duì)方的姓名
? ? private final int selfPort;//自己開放的的端口號(hào)
? ? private DatagramSocket socket;
? ? public ServerThread(int selfPort,String theOther){//構(gòu)造器
? ? ? ? this.selfPort = selfPort;
? ? ? ? this.theOther = theOther;
? ? ? ? try {
? ? ? ? ? ? //開啟服務(wù)器
? ? ? ? ? ? socket = new DatagramSocket(selfPort);
? ? ? ? } catch (SocketException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
? ? public void run() {
? ? ? ? //接收數(shù)據(jù)
? ? ? ? byte[] container;
? ? ? ? DatagramPacket packet;//包
? ? ? ? byte[] date;
? ? ? ? String receiveMsg = "";//信號(hào)燈
? ? ? ? int len = 0;
? ? ? ? try {
? ? ? ? ? ? while (!receiveMsg.equals("bye")){//如果對(duì)方說:bye,則退出聊天
? ? ? ? ? ? ? ? container = new byte[1024];
? ? ? ? ? ? ? ? packet = new DatagramPacket(container,0,container.length);
? ? ? ? ? ? ? ? socket.receive(packet);//接收數(shù)據(jù)包
? ? ? ? ? ? ? ? date =packet.getData();//獲取數(shù)據(jù)
? ? ? ? ? ? ? ? //處理數(shù)據(jù)
? ? ? ? ? ? ? ? for (int i = 0; i < date.length; i++) {
? ? ? ? ? ? ? ? ? ? if (date[i]=='\0'){
? ? ? ? ? ? ? ? ? ? ? ? len = i;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //將收到的數(shù)據(jù)轉(zhuǎn)換為字符串
? ? ? ? ? ? ? ? receiveMsg = new String(date,0, len, StandardCharsets.UTF_8);
? ? ? ? ? ? ? ? System.out.println(theOther+":"+receiveMsg);
? ? ? ? ? ? }
// ? ? ? ? ? ? ?保存聊天記錄(擴(kuò)展內(nèi)容)
// ? ? ? ? ? ? ?FileOutputStream out = new FileOutputStream(new File(theOther+"的聊天記錄.txt"));
// ? ? ? ? ? ? ?out.write(receiveMsg.getBytes(StandardCharsets.UTF_8));

? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? //關(guān)閉服務(wù)器
? ? ? ? ? ? if (socket != null){
? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? }

? ? ? ? }

? ? }
}

2.建立客戶端

package chat;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
import java.nio.charset.StandardCharsets;

public class ClientThread implements Runnable{
? ? ?private DatagramSocket socket = null;
? ? ?private BufferedReader bufferedReader= null;//緩沖流
? ? ?private final String toIp;//對(duì)方的IP
? ? ?private final int toPort;//對(duì)方的端口號(hào)

? ? public ClientThread(String toIp, int toPort) {
? ? ? ? this.toIp = toIp;
? ? ? ? this.toPort = toPort;
? ? ? ? try {
? ? ? ? ? ? socket = new DatagramSocket();
? ? ? ? ? ? bufferedReader = new BufferedReader(new InputStreamReader(System.in));//獲取鍵盤輸入
? ? ? ? } catch (SocketException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? public void run() {
? ? ? ? String SendMsg = "";//發(fā)視頻美好的消息
? ? ? ? byte[] date;
? ? ? ? DatagramPacket packet;
? ? ? ? try {
? ? ? ? while(!SendMsg.equals("bye")) {//自己發(fā)送‘bye'時(shí)關(guān)閉發(fā)送端

? ? ? ? ? ? SendMsg = bufferedReader.readLine();//讀取鍵盤輸入內(nèi)容
? ? ? ? ? ? date = SendMsg.getBytes(StandardCharsets.UTF_8);//字符串轉(zhuǎn)換為字節(jié)進(jìn)行傳輸
? ? ? ? ? ? packet = new DatagramPacket(date,0,date.length,new InetSocketAddress(toIp,toPort));
? ? ? ? ? ? socket.send(packet);//發(fā)送數(shù)據(jù)
? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? //關(guān)閉數(shù)據(jù)流
? ? ? ? ? ? if (bufferedReader!=null){
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? bufferedReader.close();
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if(socket!=null){
? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? }

? ? ? ? }

? ? }
}

3.用戶使用:

用戶1:

package chat;

public class User01 {
? ? public static void main(String[] args) {
? ? ? ? System.out.println("小明的聊天室?。。?);
? ? ? ? new Thread(new ServerThread(9000,"小紅")).start();//開啟接收
? ? ? ? new Thread(new ClientThread("localhost",9001)).start();//開啟發(fā)送
? ? }
}

用戶2:

package chat;

public class User02 {
? ? public static void main(String[] args) {
? ? ? ? System.out.println("小紅的聊天室?。?!");
? ? ? ? new Thread(new ServerThread(9001,"小明")).start();
? ? ? ? new Thread(new ClientThread("localhost",9000)).start();
? ? }
}

多人聊天思路:

用戶—>公共服務(wù)器接收端打包數(shù)據(jù)–>服務(wù)器發(fā)送端發(fā)送給各個(gè)用戶—>用戶

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中Object用法詳解

    Java中Object用法詳解

    Java是面向?qū)ο蟮木幊陶Z言,而在面向?qū)ο笾?,所有的Java類都有一個(gè)共同的祖先類,這就是Object,那么Object都有哪些特性呢?今天小編就簡(jiǎn)單跟大家分析一下,感興趣的同學(xué)可以跟著小編一起學(xué)習(xí)
    2023-05-05
  • Java實(shí)現(xiàn)購(gòu)物管理系統(tǒng)

    Java實(shí)現(xiàn)購(gòu)物管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)購(gòu)物管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • springboot使用Hutool的JschUtil及下載安裝步驟

    springboot使用Hutool的JschUtil及下載安裝步驟

    這篇文章主要為大家介紹了springboot使用Hutool的JschUtil的方法及下載安裝詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java 數(shù)組復(fù)制clone方法實(shí)現(xiàn)詳解

    Java 數(shù)組復(fù)制clone方法實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java 數(shù)組復(fù)制clone方法實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java使用FTPClient類讀寫FTP

    Java使用FTPClient類讀寫FTP

    這篇文章主要為大家詳細(xì)介紹了Java使用FTPClient類讀寫FTP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Maven構(gòu)建生命周期詳細(xì)介紹

    Maven構(gòu)建生命周期詳細(xì)介紹

    這篇文章主要介紹了Maven構(gòu)建生命周期詳細(xì)介紹,小編覺得還是挺不錯(cuò)的,這里分享給大家,需要的朋友可以參考下。
    2017-11-11
  • SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決

    SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決

    這篇文章主要介紹了SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例

    Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例

    定時(shí)任務(wù)是一項(xiàng)至關(guān)重要的功能,它們使得我們能夠按照預(yù)定的時(shí)間執(zhí)行特定的任務(wù),本文主要介紹了Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例,感興趣的可以了解一下
    2024-05-05
  • SpringBoot集成echarts實(shí)現(xiàn)k線圖功能

    SpringBoot集成echarts實(shí)現(xiàn)k線圖功能

    ECharts是一款基于JavaScript的數(shù)據(jù)可視化圖表庫(kù),提供直觀,生動(dòng),可交互,可個(gè)性化定制的數(shù)據(jù)可視化圖表,本文給大家介紹了SpringBoot集成echarts實(shí)現(xiàn)k線圖功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • Spring?Cloud灰度部署實(shí)現(xiàn)過程詳解

    Spring?Cloud灰度部署實(shí)現(xiàn)過程詳解

    這篇文章主要為大家介紹了Spring?Cloud灰度部署實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論