首页 > 其他分享 >用UDP协议实现发送接收的网络聊天室

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

时间:2024-04-04 20:03:09浏览次数:23  
标签:UDP java bytes 聊天室 发送 import new ds dp

 发送数据

 

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类

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

 修改选项

就可以做到

最最基本的网络聊天室 

标签:UDP,java,bytes,聊天室,发送,import,new,ds,dp
From: https://blog.csdn.net/qq_30500575/article/details/137358559

相关文章

  • 苹果电脑版(Mac os)系统和iphone(IOS系统)手机发送imessages短信的全部方式
    一、iphone手机(IOS系统)上群发总结为以下几种方式/*经小编通过测试,使用iphone手机进行iMessage群发分越狱和免越狱版,越狱版可以做到通过修改序列号来达到无限次数更换ID,免越狱iphone只可以做到大约60、70次更换ID此后将无法再更换ID。*/1、通过iphone手机上自带的快捷指令,来......
  • Prometheus+Alertmanager+Node_exporter监控系统并动态配置数据库告警规则发送动态通
    前提需求:告警规则和告警发送通知策略都动态配置在数据库,方便管理和随时修改、删除。Prometheus需要动态读取数据库配置的告警规则,并根据数据的通知策略(邮件、短信、钉钉、微信等)把告警发送出去。需求分析:下面主要从表设计、组件配置、代码逻辑设计几个方面介绍。1.表设计1.1......
  • STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)
    STM32第六天一、 USART1、USART概念USART:(UniversalSynchronous/AsynchronousReceiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备处理器与外部设备通信的两种方式:u并行通信(八车道)......
  • 网络基础二——传输层协议UDP与TCP
    九、传输层协议​传输层协议有UDP协议、TCP协议等;​两个远端机器通过使用"源IP",“源端口号”,“目的IP”,“目的端口号”,"协议号"来标识一次通信;9.1端口号的划分​0-1023:知名端口号,HTTP,HTTPS,FTP,SSH等应用层协议,他们的端口号都是固定的;如:ssh使用的是22号端口,ftp(rzsz使......
  • ffmpeg tcp/udp 拉流
    参考文章:ffmpeg命令分析-拉取TCP流FFmpeg实现rtp推流ffmpeg除了拉取rtsp,hsl等协议外,也支持直接通过tcp/udp推拉流url格式为udp://ip:port或tcp://ip:port注意:udp或tcp有主被动的概念:主动:自己作为客户端,从服务端拉流被动:自己作为服务端,等待客户端推流直接使用tcp/u......
  • python使用request发送x-www-form-urlencoded类型的数据
    场景:当接口的Content-Type类型是x-www-form-urlencoded,使用json类型去请求,无法请求成功解决方法:使用parse.urlencode()方法对json数据进行解码处理,再传入。实例代码如下:importrequestsfromurllibimportparsesession=requests.session()headers={"Content-Type":"app......
  • 测试UDP端口是否开放
    软件下载地址:https://nmap.org/download.htmlwindows安装后,添加下系统路径 命令说明:>ncat-hNcat7.94(https://nmap.org/ncat)Usage:ncat[options][hostname][port]Optionstakingatimeassumeseconds.Append'ms'formilliseconds,'s'forsec......
  • 项目开发---用户登录发送短信实现(使用阿里云短信接口)(看这篇就够了)
    目录:使用阿里云开通短信服务教程编写代码使用阿里云开通短信服务教程阿里云官网......
  • IP(Internet Protocol)是一种网络协议,用于在网络中发送和接收数据包
    IP(InternetProtocol)是一种网络协议,用于在网络中发送和接收数据包。它是一个无连接的、不可靠的数据报协议,负责将数据从源主机传输到目标主机。IP协议的主要功能包括寻址、路由和分段。寻址:IP协议为每个连接到网络的设备分配一个唯一的IP地址,这个地址用于在网络中识别设备......
  • 批量邮箱API发送邮件时如何提高发送效率?
    批量邮箱API发送邮件的方法?如何用API批量发送邮件?如何在使用批量邮箱API发送邮件时提高发送效率,却是众多企业和开发者所关注的焦点。AokSend将从多个方面探讨如何优化批量邮箱API发送邮件的效率,确保邮件能够迅速、准确地送达目标用户。批量邮箱API发送邮件:选择服务不同的服......