用UDP协议实现发送接收的网络聊天室

简介: 用UDP协议实现发送接收的网络聊天室

发送数据

UDP协议是

面向无连接的

"面向无连接的"通常指的是一种网络通信模式,也称为无连接通信或者数据报通信。在这种模式下,通信的两个端点之间不需要建立持续的连接,而是通过将数据分成小块(数据包)并单独发送来进行通信。每个数据包都包含了足够的信息(如源地址、目标地址、序列号等)来独立地到达目的地,并且可能以不同的路径到达。

无连接通信的优点包括简单、灵活和高效,因为不需要在通信的开始和结束时建立和释放连接。它适用于需要在网络中传输少量数据或需要快速发送数据的场景,比如实时音视频传输、互联网电话、在线游戏等。

import java.io.IOException;
import java.net.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        //发送数据
 
        /*
        创建DategramSocket对象(快递公司)
        * 细节
        * 绑定端口 以后我们就是通过这个端口往外发送
        * 空参构造 所有的可用端口中随机一个进行使用
        * 有参构造 指定端口号进行绑定
        * */
        DatagramSocket ds=new DatagramSocket();
 
        //打包数据
        String str="你好啊";
        byte bytes[]=str.getBytes();
 
        //发送电脑
        InetAddress address=InetAddress.getByName("127.0.0.1");
 
        //端口
        int port=10086;
 
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
 
        //发送数据
        ds.send(dp);
 
        //释放资源
        ds.close();
    }
}

接收数据

import java.io.IOException;
import java.net.*;
 
public class Receive {
    public static void main(String[] args) throws IOException {
        //接收数据
 
        /*
        创建DategramSocket对象(快递公司)
        * 细节
        * 在接收的时候,一定要绑定端口
        * 而且绑定的端口一定要和发送的端口保持一致
        *
        * */
        DatagramSocket ds=new DatagramSocket(10086);
 
        //接收数据包
        byte[] bytes=new byte[1024];
        //接收数据时 是把数据放到bytes这个数组里面的
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
        ds.receive(dp);
 
        //解析数据包
        byte[] data=dp.getData();
        int len=dp.getLength();
        InetAddress address=dp.getAddress();//数据是从哪台电脑发送过来的
        int port=dp.getPort();//获取对方的端口
 
        //打印接收的数据
        System.out.println(new String(data,0,len));
        //打印数据是从哪台电脑的哪个端口发出的
        System.out.println(address+" "+port);
 
        ds.close();
    }
}

receive方法时阻塞的

接收程序如果运行

会停留于此行 如果没有发送数据 就会一直停留在此处等待

只有发送程序启动了 才会进行receive下面代码的执行

UDP聊天室

import java.io.IOException;
import java.net.*;
import java.util.Scanner;
 
public class send {
    public static void main(String[] args) throws IOException {
        //创建对象 没有指定端口 说明会从一个随机端口发出数据
        DatagramSocket ds=new DatagramSocket();
 
        //打包数据
        Scanner sc=new Scanner(System.in);
 
        while(true) {
            System.out.println("请输入您要输入的话");
            String str = sc.nextLine();
 
            //循环退出条件
            if(str.equals("886"))break;
 
            byte[] bytes = str.getBytes();//打包成字节数组
 
            InetAddress address = InetAddress.getByName("127.0.0.1");//接收数据的计算机
 
            int port = 10086;//接收数据的端口
 
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
 
            //发送数据
            ds.send(dp);
        }
 
        //释放资源
        ds.close();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
 
public class receive {
    public static void main(String[] args) throws IOException {
        //创建对象DategramSocket的对象
        DatagramSocket ds=new DatagramSocket(10086);
 
        //接收数据包
        byte[] bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
 
        while (true) {
            //接收数据
            ds.receive(dp);
 
            //解析数据包
            byte[] data=dp.getData();
            int len=dp.getLength();
            String ip=dp.getAddress().getHostAddress();//获取IP
            String name=dp.getAddress().getHostName();//获取名称
 
            //打印数据
            System.out.println(ip);
            System.out.println(name);
            System.out.println(new String(data,0,len));
        }
    }
}

我们通过修改运行配置能启动多个send类

实现多发送 网络聊天室功能

修改选项

就可以做到

最最基本的网络聊天室

目录
相关文章
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
1400 23
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
516 19
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
490 22
|
网络协议 数据安全/隐私保护 网络架构
|
缓存 网络协议 API
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
|
网络协议 安全 网络安全
什么是TCP/UDP/HTTP?它们如何影响你的内网穿透体验?
数据的传输离不开各种协议,它们就像现实世界中的交通规则,规定了数据如何打包、寻址、传输和接收。对于使用内网穿透的用户来说,理解TCP、UDP和HTTP这些基础协议的特点,能帮助你更好地理解其性能表现,并选择最适合的配置方案。
|
网络协议 安全 网络安全
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
848 2
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
960 1