Java基于UDP协议的聊天室功能

UDP简述

UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议。它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。

Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是TCP,该协议几乎做了所有的事情。“when in trouble , use TCP”。

那么今天讲讲如何使用UDP协议构建一个简单的小型聊天室。ChatA先发起聊天,然后ChatB才能在控制台输入聊天内容。如果想结束聊天可以输入over,当一方结束聊天,另一方也将结束聊天。

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);
        
        // 创建基于UDP协议的DatagramSocket对象
        // 客户端A监听8888端口
        try (DatagramSocket socket = new DatagramSocket(8888)) {
            //封装成DatagramPacket对象(数据包)
            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) {
                // 发送数据包
                System.out.print("【客户端A】(你)说: ");
                String sendContent = input.nextLine();
                sendPacket.setData(sendContent.getBytes());
                socket.send(sendPacket);
                if (sendContent.equals("over")) {
                    System.out.println("你退出了聊天......");
                    break;
                }
                // 接收数据包
                socket.receive(receivePacket);
                String receiveContent = new String(
                        receivePacket.getData(),   //数据
                        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监听7777端口
                DatagramSocket socket = new DatagramSocket(7777)) {
            // 封装成DatagramPacket对象(数据包)
            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) {
                // 接收数据包
                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);

                // 发送数据包
                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();
        }

    }
}

运行结果展示:

1.运行ChatA和ChatB(不分先后顺序)

2. ChatA先发起聊天:

在控制台输入:你好

ChatB显示内容:

3. ChatB向ChatA发起聊天:

ChatA显示内容:

4. 输入over结束聊天:

ChatA:

ChatB:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java socket通信模拟QQ实现多人聊天室

    目录 一.socket通信基本原理 二.用socket制作一个多人聊天室 三.实现效果 四.总结 一.socket通信基本原理 socket 通信是基于TCP/IP ⽹络层上的⼀种传送⽅式,我们通常把TCP和UDP称为传输层. ​ 如上图,在七个层级关系中,我们讲的socket属于传输层,其中UDP是⼀种⾯向⽆连接的传输层协议.UDP不关⼼对端是否真正收到了传送过去的数据.如果需要检查对端是否收到分组数据包,或者对端是否连接到⽹络,则需要在应⽤程序中实现.UDP常⽤在分组数据较少或多播.⼴播通信

  • JAVA NIO实现简单聊天室功能

    本文实例为大家分享了JAVA NIO实现简单聊天室功能的具体代码,供大家参考,具体内容如下 服务端 初始化一个ServerSocketChannel,绑定端口,然后使用Selector监听accept事件. 当有accept发生时,表示有客户端连接进来了,获取客户端的SocketChannel,然后注册其read事件:用来接收客户端发送的消息. package chatroom; import java.io.IOException; import java.net.InetSocketAddr

  • Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理.  "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: •将客户端的信息(进入了哪一

  • 使用java基于pushlet和bootstrap实现的简单聊天室

    这是一个简单的不能再简单的聊天室,本代码包含以下功能 1.用户注册. 2.用户登录. 3.当然还可以聊天. DBUtil.java 复制代码 代码如下: package com.hongyuan.core;   import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statemen

  • Java编程实现基于TCP协议的Socket聊天室示例

    本文实例讲述了Java编程实现基于TCP协议的Socket聊天室.分享给大家供大家参考,具体如下: 这里使用Socket套接字进行编程,完成的是基于TCP可靠服务实现服务器与客户端的双通信. Server服务器端: package com.han; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.Win

  • java实现一个简单TCPSocket聊天室功能分享

    本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下 1.TCPserver.java import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class TCPserver{ private static final int SERVERPORT = 8888; private ServerSocket MyServe

  • Java基于Tcp/ip连接的多人交互聊天室

    本文实例为大家分享了Java  Socket编程实现多人交互聊天室的具体代码,供大家参考,具体内容如下 本项目由三个.java文件(Client.java.Server.java.UI.java)和一个.jpg图片文件组成UI.java是负责界面的构成文件.本聊天室的界面极其简单.主要分为两个界面:第一个是启动时需要登陆的界面如下: 输入名字进去以后就可以直接聊天     这个聊天室相当于群聊,每一个登陆进去的人发的信息,其他人都会收到. 使用指南: 1.运行Server.java文件,保证服务

  • Java基于UDP协议的聊天室功能

    UDP简述 UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议.它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法. Internet 的传输层有两个主要协议,互为补充.无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情.面向连接的是TCP,该协议几乎做了所有的事情.“when in trouble , use TCP”. 那

  • java实现基于UDP协议的聊天小程序操作

    UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议.它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据.对可靠性要求不高的应用环境.正因为UDP协议没有连接的过程,所以它的通信效率高:但也正因为如此,它的可靠性不如TCP协议高.QQ就使用UDP发消息,因此有时会出现收不到消息的情况. 利用UDP协议的发送和接收,模拟聊天小程序 创建聊天程序的A端: 1.发送信息到接收端                 1 .准

  • java基于UDP实现在线聊天功能

    本文实例为大家分享了java基于UDP实现在线聊天的具体代码,供大家参考,具体内容如下 效果图: 一.学习UDP的简单使用步骤 接收端: DatagramSocket socket = null;         try {             //1.开启自己的端口(客户端连接的端口)             socket = new DatagramSocket(9999);             //2.接收数据             byte[] buffer = new byt

  • Java基于socket实现简易聊天室实例

    本文实例讲述了Java基于socket实现简易聊天室的方法.分享给大家供大家参考.具体实现方法如下: chatroomdemo.java package com.socket.demo; import java.io.IOException; import java.net.DatagramSocket; public class ChatRoomDemo { /** * @param args * @throws IOException */ public static void main(S

  • Java SE实现多人聊天室功能

    本文实例为大家分享了Java SE实现多人聊天室功能的具体代码,供大家参考,具体内容如下 实现功能: 1.实现用户注册上线,下线 2.实现群聊和私聊功能 3.实现统计当前在线人数 实现思路: 1.首先,要实现服务端与客户端之间的连接 这里是使用套接字建立TCP连接: (1)服务器端先实例化一个描述服务器端口号的ServerSocket对象 (2)客户端要创建Socket对象来连接指定的服务器端 (3)服务器端调用ServerSocket类的accept()方法来监听连接到服务器端的客户端信息 (

  • Java 基于UDP协议实现消息发送

    发短信:不用连接,但需要知道对方的地址,客户端.服务端没有明确的界限,可以说没有客户端.服务端一说. 发送端 package lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 发送端 */ public class UdpClientDemo1 { public static void main(String[] args) th

  • Java多线程实现多人聊天室功能

    本文为大家分享了Java多线程实现多人聊天室功能的具体代码,供大家参考,具体内容如下 1.实验目的: 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是 "欢迎使用 XXX 聊天室应用",其中 XXX 是自己的班级姓名学号,如"软件 171 张三 1234". 2.实验代码: 服务端程序代码: ServerChar.java package works; import java.io.DataInputStream; impor

  • C++基于socket编程实现聊天室功能

    本文实例为大家分享了C++基于socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include "pch.h" #include <iostream> #include "winsock2.h" #include "stdlib.h" #include "stdio.h"

随机推荐