用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类

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

修改选项

就可以做到

最最基本的网络聊天室

目录
打赏
0
0
0
0
38
分享
相关文章
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
21天前
|
Nettyの网络聊天室&扩展序列化算法
通过本文的介绍,我们详细讲解了如何使用Netty构建一个简单的网络聊天室,并扩展序列化算法以提高数据传输效率。Netty的高性能和灵活性使其成为实现各种网络应用的理想选择。希望本文能帮助您更好地理解和使用Netty进行网络编程。
38 12
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
74 1
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
111 2
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
77 11
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
68 3
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
131 3
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
62 17
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等