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

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

修改选项

就可以做到

最最基本的网络聊天室

目录
相关文章
|
19天前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
|
7天前
|
传感器 数据采集 网络协议
什么是网络通信中的 Modbus协议?
网络协议是网络通信中至关重要的一部分,它定义了网络中两个或多个设备之间通信的规则、过程和格式。这些规则确保了计算机网络设备能够使用一种通用语言来传输和接收数据,而不管它们的设计、硬件或基础设施如何。
14 1
|
9天前
|
网络协议 数据安全/隐私保护 Python
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
|
11天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
20天前
|
传感器 算法
基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点
- **LEACH协议**在WSN中通过分簇减少能耗,普通节点向最近簇头发送数据,簇头融合后发送给基站。本项目研究LEACH在不同初始能量、数据包及控制包长度条件下的网络性能,如剩余节点、能量、接收数据量和累计接收量。
|
21天前
|
人工智能 缓存 网络协议
网络层之三层交换、icmp协议、arp协议
网络层之三层交换、icmp协议、arp协议
|
21天前
|
缓存 网络协议 网络性能优化
计算机网络—传输层-tcp、udp协议详解
计算机网络—传输层-tcp、udp协议详解
|
19天前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
|
1月前
|
网络协议 JavaScript 安全
深入浅出TCP 与 UDP
深入浅出TCP 与 UDP
47 0
|
2月前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
28 0