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

Java基于UDP協(xié)議的聊天室功能

 更新時間:2022年09月16日 17:20:05   作者:一只碼農(nóng)菜汪  
這篇文章主要為大家詳細介紹了Java基于UDP協(xié)議的聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

UDP簡述

UDP(User Datagram Protocol)協(xié)議是Internet 協(xié)議集支持的一個無連接的傳輸協(xié)議,中文名為用戶數(shù)據(jù)報協(xié)議。它為應(yīng)用程序提供了一種無需建立連接就可以發(fā)送封裝的 IP 數(shù)據(jù)報的方法。

Internet 的傳輸層有兩個主要協(xié)議,互為補充。無連接的是 UDP,它除了給應(yīng)用程序發(fā)送數(shù)據(jù)包功能并允許它們在所需的層次上架構(gòu)自己的協(xié)議之外,幾乎沒有做什么特別的事情。面向連接的是TCP,該協(xié)議幾乎做了所有的事情。“when in trouble , use TCP”。

那么今天講講如何使用UDP協(xié)議構(gòu)建一個簡單的小型聊天室。ChatA先發(fā)起聊天,然后ChatB才能在控制臺輸入聊天內(nèi)容。如果想結(jié)束聊天可以輸入over,當一方結(jié)束聊天,另一方也將結(jié)束聊天。

ChatA類(客戶端A):

代碼展示如下:

package my.demo;

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

//客戶端A
public class ChatA {
?? ?public static void main(String[] args) {
?? ??? ?//控制臺輸入
?? ??? ?Scanner input = new Scanner(System.in);
?? ??? ?
?? ??? ?// 創(chuàng)建基于UDP協(xié)議的DatagramSocket對象
?? ??? ?// 客戶端A監(jiān)聽8888端口
?? ??? ?try (DatagramSocket socket = new DatagramSocket(8888)) {
?? ??? ??? ?//封裝成DatagramPacket對象(數(shù)據(jù)包)
?? ??? ??? ?DatagramPacket sendPacket = new DatagramPacket(
?? ??? ??? ??? ??? ?new byte[1024],
?? ??? ??? ??? ??? ?1024,
?? ??? ??? ??? ??? ?new InetSocketAddress("192.168.254.105", 7777));//對方的IP地址和端口號
?? ??? ??? ?DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);
?? ??? ??? ?while (true) {
?? ??? ??? ??? ?// 發(fā)送數(shù)據(jù)包
?? ??? ??? ??? ?System.out.print("【客戶端A】(你)說: ");
?? ??? ??? ??? ?String sendContent = input.nextLine();
?? ??? ??? ??? ?sendPacket.setData(sendContent.getBytes());
?? ??? ??? ??? ?socket.send(sendPacket);
?? ??? ??? ??? ?if (sendContent.equals("over")) {
?? ??? ??? ??? ??? ?System.out.println("你退出了聊天......");
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 接收數(shù)據(jù)包
?? ??? ??? ??? ?socket.receive(receivePacket);
?? ??? ??? ??? ?String receiveContent = new String(
?? ??? ??? ??? ??? ??? ?receivePacket.getData(), ? //數(shù)據(jù)
?? ??? ??? ??? ??? ??? ?receivePacket.getOffset(), //讀取位置
?? ??? ??? ??? ??? ??? ?receivePacket.getLength());//長度
?? ??? ??? ??? ?if (receiveContent.equals("over")) {
?? ??? ??? ??? ??? ?System.out.println("對方退出了聊天......");
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?System.out.println("【客戶端B】(他)說: " + receiveContent);
?? ??? ??? ?}
?? ??? ?} catch (SocketException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}
}

ChatB類(客戶端B):

代碼展示如下:

package my.demo;

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

//客戶端B
public class ChatB {
?? ?public static void main(String[] args) {
?? ??? ?// 控制臺輸入
?? ??? ?Scanner input = new Scanner(System.in);

?? ??? ?try (// 客戶端B監(jiān)聽7777端口
?? ??? ??? ??? ?DatagramSocket socket = new DatagramSocket(7777)) {
?? ??? ??? ?// 封裝成DatagramPacket對象(數(shù)據(jù)包)
?? ??? ??? ?DatagramPacket sendPacket = new DatagramPacket(new byte[1024], 1024,
?? ??? ??? ??? ??? ?new InetSocketAddress("192.168.254.105", 8888));// 對方的IP地址和端口號
?? ??? ??? ?DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);

?? ??? ??? ?while (true) {
?? ??? ??? ??? ?// 接收數(shù)據(jù)包
?? ??? ??? ??? ?socket.receive(receivePacket);
?? ??? ??? ??? ?String receiveContent = new String(receivePacket.getData(), receivePacket.getOffset(),
?? ??? ??? ??? ??? ??? ?receivePacket.getLength());
?? ??? ??? ??? ?if (receiveContent.equals("over")) {
?? ??? ??? ??? ??? ?System.out.println("對方退出了聊天......");
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?System.out.println("【客戶端A】(他)說: " + receiveContent);

?? ??? ??? ??? ?// 發(fā)送數(shù)據(jù)包
?? ??? ??? ??? ?System.out.print("【客戶端B】(你)說: ");
?? ??? ??? ??? ?String sendContent = input.nextLine();
?? ??? ??? ??? ?sendPacket.setData(sendContent.getBytes());
?? ??? ??? ??? ?socket.send(sendPacket);
?? ??? ??? ??? ?if (sendContent.equals("over")) {
?? ??? ??? ??? ??? ?System.out.println("你退出了聊天......");
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?} catch (SocketException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}

?? ?}
}

運行結(jié)果展示:

1.運行ChatA和ChatB(不分先后順序)

2. ChatA先發(fā)起聊天:

在控制臺輸入:你好

ChatB顯示內(nèi)容:

3. ChatB向ChatA發(fā)起聊天:

ChatA顯示內(nèi)容:

4. 輸入over結(jié)束聊天:

ChatA:

ChatB:

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

相關(guān)文章

  • 如何使用Bean Validation 解決業(yè)務(wù)中參數(shù)校驗

    如何使用Bean Validation 解決業(yè)務(wù)中參數(shù)校驗

    這篇文章主要介紹了如何使用Bean Validation 解決業(yè)務(wù)中參數(shù)校驗操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解springboot中的jar包部署步驟

    詳解springboot中的jar包部署步驟

    這篇文章主要介紹了springboot中的jar包部署步驟及l(fā)inux中部署項目常用指令,需要的朋友可以參考下
    2018-07-07
  • java實現(xiàn)打磚塊小游戲

    java實現(xiàn)打磚塊小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)打磚塊小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java 圖片與base64相互轉(zhuǎn)化的示例

    java 圖片與base64相互轉(zhuǎn)化的示例

    這篇文章主要介紹了java 圖片與base64相互轉(zhuǎn)化的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • springboot?vue測試平臺接口定義前后端新增功能實現(xiàn)

    springboot?vue測試平臺接口定義前后端新增功能實現(xiàn)

    這篇文章主要介紹了springboot?vue測試平臺接口定義前后端新增功能實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Spring MVC 簡單的hello world的實現(xiàn)

    Spring MVC 簡單的hello world的實現(xiàn)

    這篇文章主要介紹了Spring MVC 簡單的hello world的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)

    詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)

    這篇文章主要介紹了詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java中常用的設(shè)計模式之工廠模式詳解

    Java中常用的設(shè)計模式之工廠模式詳解

    這篇文章主要為大家詳細介紹了Java中常用的設(shè)計模式之工廠模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • ShardingSphere數(shù)據(jù)分片算法及測試實戰(zhàn)

    ShardingSphere數(shù)據(jù)分片算法及測試實戰(zhàn)

    這篇文章主要為大家介紹了ShardingSphere數(shù)據(jù)分片算法及測試實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 5種java排序算法匯總工具類

    5種java排序算法匯總工具類

    這篇文章主要總結(jié)了java的快速排序,希爾排序,插入排序,堆排序,歸并排序五種排序算法,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

云龙县| 通州区| 清徐县| 诏安县| 太保市| 娄底市| 合川市| 甘孜| 鄯善县| 郧西县| 高唐县| 浦北县| 濮阳县| 武平县| 勐海县| 紫阳县| 关岭| 宁明县| 衡南县| 嘉祥县| 柳林县| 麟游县| 盐边县| 西峡县| 昌黎县| 奎屯市| 龙海市| 台湾省| 阳东县| 武安市| 开封市| 科技| 广东省| 金溪县| 乌兰浩特市| 安福县| 深圳市| 岐山县| 珲春市| 故城县| 海宁市|