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

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

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

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

效果圖:

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

接收端:

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.獲得連接對象
//獲取對方的IP和端口號進行連接
?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ù)的長度起始,發(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();
? ? ? ? ? ? }
? ? ? ? }

二、多線程實現(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;//對方的姓名
? ? private final int selfPort;//自己開放的的端口號
? ? 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 = "";//信號燈
? ? ? ? int len = 0;
? ? ? ? try {
? ? ? ? ? ? while (!receiveMsg.equals("bye")){//如果對方說: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);
? ? ? ? ? ? }
// ? ? ? ? ? ? ?保存聊天記錄(擴展內(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;//對方的IP
? ? ?private final int toPort;//對方的端口號

? ? 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'時關(guān)閉發(fā)送端

? ? ? ? ? ? SendMsg = bufferedReader.readLine();//讀取鍵盤輸入內(nèi)容
? ? ? ? ? ? date = SendMsg.getBytes(StandardCharsets.UTF_8);//字符串轉(zhuǎn)換為字節(jié)進行傳輸
? ? ? ? ? ? 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ā)送給各個用戶—>用戶

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

相關(guān)文章

  • Java 使用getClass().getResourceAsStream()方法獲取資源

    Java 使用getClass().getResourceAsStream()方法獲取資源

    這篇文章主要介紹了Java 使用getClass().getResourceAsStream()方法獲取資源的相關(guān)資料,這里主要講解哪種方式可以獲取到文件資源,需要的朋友可以參考下
    2017-07-07
  • Java中的升序和降序問題

    Java中的升序和降序問題

    這篇文章主要介紹了Java中的升序和降序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring boot使用thymeleaf模板的方法詳解

    spring boot使用thymeleaf模板的方法詳解

    thymeleaf 是新一代的模板引擎,在spring4.0中推薦使用thymeleaf來做前端模版引擎。下面這篇文章主要給大家介紹了關(guān)于spring boot使用thymeleaf模板的方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面來一起看看吧。
    2017-07-07
  • Struts2攔截器 關(guān)于解決登錄的問題

    Struts2攔截器 關(guān)于解決登錄的問題

    下面小編就為大家?guī)硪黄猄truts2攔截器 關(guān)于解決登錄的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    這篇文章主要介紹了springboot使用小工具之Lombok、devtools、Spring Initailizr詳解,Lombok可以代替手寫get、set、構(gòu)造方法等,需要idea裝插件lombok,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 實例分析java開啟線程的方法

    實例分析java開啟線程的方法

    在本文里我們通過實例給大家講解了JAVA開啟線程的方法和相關(guān)知識點,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • Java螺旋矩陣處理方法詳解

    Java螺旋矩陣處理方法詳解

    螺旋矩陣是指一個呈螺旋狀的矩陣,它的數(shù)字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此循環(huán)。利用java實現(xiàn)的螺旋矩陣,當(dāng)輸入N之后,會自動打印出螺旋矩陣
    2022-09-09
  • 基于SpringAop中JoinPoint對象的使用說明

    基于SpringAop中JoinPoint對象的使用說明

    這篇文章主要介紹了基于SpringAop中JoinPoint對象的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis Plus 實現(xiàn)批量插入的示例代碼

    Mybatis Plus 實現(xiàn)批量插入的示例代碼

    本文主要介紹了Mybatis Plus 實現(xiàn)批量插入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java隨機字符串與簡單加密工具類詳解

    Java隨機字符串與簡單加密工具類詳解

    這篇文章主要介紹了Java隨機字符串與簡單加密工具類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

喜德县| 集安市| 藁城市| 宜君县| 丰镇市| 黄大仙区| 宁河县| 延津县| 高清| 兰考县| 五家渠市| 泽普县| 钦州市| 辰溪县| 宣汉县| 汉阴县| 东平县| 万全县| 蕉岭县| 耒阳市| 泸定县| 元氏县| 木里| 遂溪县| 库车县| 若羌县| 拜泉县| 成安县| 霍邱县| 布拖县| 金门县| 文水县| 建宁县| 汕尾市| 理塘县| 织金县| 麦盖提县| 密云县| 双辽市| 张家川| 余干县|