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

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.開(kāi)啟自己的端口(客戶端連接的端口)
? ? ? ? ? ? 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;//自己開(kāi)放的的端口號(hào)
? ? private DatagramSocket socket;
? ? public ServerThread(int selfPort,String theOther){//構(gòu)造器
? ? ? ? this.selfPort = selfPort;
? ? ? ? this.theOther = theOther;
? ? ? ? try {
? ? ? ? ? ? //開(kāi)啟服務(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ì)方說(shuō):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));//獲取鍵盤(pán)輸入
? ? ? ? } 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();//讀取鍵盤(pán)輸入內(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();//開(kāi)啟接收
? ? ? ? new Thread(new ClientThread("localhost",9001)).start();//開(kāi)啟發(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 使用getClass().getResourceAsStream()方法獲取資源

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

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

    Java中的升序和降序問(wèn)題

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

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

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

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

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

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

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

    實(shí)例分析java開(kāi)啟線程的方法

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

    Java螺旋矩陣處理方法詳解

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

    基于SpringAop中JoinPoint對(duì)象的使用說(shuō)明

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

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

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

    Java隨機(jī)字符串與簡(jiǎn)單加密工具類詳解

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

最新評(píng)論

建水县| 乐山市| 工布江达县| 桃江县| 巴楚县| 房产| 沙湾县| 海南省| 木兰县| 格尔木市| 绩溪县| 安塞县| 河曲县| 八宿县| 南通市| 香格里拉县| 陇西县| 长沙县| 洛川县| 千阳县| 神池县| 辽源市| 怀远县| 德保县| 江安县| 汉中市| 弥渡县| 中宁县| 江城| 彰武县| 宜春市| 郴州市| 金溪县| 五台县| 井陉县| 徐闻县| 聂拉木县| 米泉市| 张家界市| 湘潭县| 买车|