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

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

修改选项

就可以做到

最最基本的网络聊天室

目录
相关文章
|
25天前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
65 18
|
1月前
|
监控 网络协议 视频直播
UDP协议(特点与应用场景)
UDP(用户数据报协议)是传输层的一种无连接协议,具有简单高效、低延迟的特点。其主要特点包括:无连接(无需握手)、不可靠传输(不保证数据完整性)、面向数据报(独立传输)。尽管UDP不如TCP可靠,但在实时通信(如语音通话、视频会议)、在线游戏、多媒体流媒体(如直播、点播)及网络监控等领域广泛应用,满足了对速度和实时性要求较高的需求。
223 19
|
2月前
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
125 14
|
2月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
149 1
|
2月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
102 22
|
2月前
|
网络协议 数据安全/隐私保护 网络架构
|
3月前
|
缓存 网络协议 API
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
|
6月前
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
|
6月前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
386 2
|
7月前
|
网络协议 算法 网络性能优化

热门文章

最新文章