JavaNote 3.3DatagramSocket和DatagramPacket

Java UDP通信:DatagramSocket和DatagramPacket UDP 是在IP网络上收发数据的传输层协议,其速度快但不可靠。为什么会使用这种不可靠的协议呢?许多应用保持最快的速度比保证每一位数据都正确更为重要,例如实时音频或视频丢失数据只会作为干扰出现并且可以容忍;另外一些应用,利用UDP数据传输可靠性就需要在应用中进行控制。DNS、NFS、TFTP等都可以配置使用UDP协议。 阅读详情

一、DatagramSocket类

1、构造方法

DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口。
protected  DatagramSocket(DatagramSocketImpl impl)
创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。
DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket(int port, InetAddress laddr)
创建数据报套接字,将其绑定到指定的本地地址。
DatagramSocket(SocketAddress bindaddr)
创建数据报套接字,将其绑定到指定的本地套接字地址。

二、DatagramPacket类

1、构造方法

DatagramPacket(byte[] buf, int length) 
构造 DatagramPacket,用来接收长度为 length 的数据包。 
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 
DatagramPacket(byte[] buf, int offset, int length) 
构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。 
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 
DatagramPacket(byte[] buf, int length, SocketAddress address) 
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 

三、实例

代码1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

public class Message {
        public static void main (String args[]){
            System.out.println("客户端正在启动……");
            System.out.println("现在可以开始聊天了");
            try {
                byte d[];
                BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
                DatagramSocket datagramSocket = new DatagramSocket(6666);
                while (true){
                    String str = b.readLine();
                    System.out.println("Message:"+str);
                    byte c[] = str.getBytes();
                    DatagramPacket datagramPacket = new DatagramPacket(c,c.length,InetAddress.getLocalHost(),9999);
                    datagramSocket.send(datagramPacket);
                    d = new byte[1024];
                    DatagramPacket datagramPacket1 = new DatagramPacket(d,d.length);
                    datagramSocket.receive(datagramPacket1);
                    String msg = new String(d,0,d.length);
                    System.out.println("Test31:"+msg);
                }
            }
            catch (IOException e){
                e.getMessage();
            }
        }
}

代码2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
public class Test31 {
    public static void main(String args[]){
            System.out.println("客户端正在启动……");
            System.out.println("现在可以开始聊天了");
            try {
                byte c[] ;
                byte d[] ;
                DatagramSocket datagramSocket = new DatagramSocket(9999);
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
                while (true){
                    c = new byte[1024];
                    DatagramPacket datagramPacket = new DatagramPacket(c,c.length);
                    datagramSocket.receive(datagramPacket);
                    String msg = new String(c,0,c.length);
                    System.out.println("Message:"+msg);
                    String str = bufferedReader.readLine();
                    System.out.println("Test31:"+str);
                    d = str.getBytes();
                    DatagramPacket datagramPacket1 = new DatagramPacket( d,d.length,InetAddress.getLocalHost(),6666);
                    datagramSocket.send(datagramPacket1);
                }
            }
            catch (SocketException e){
                e.getMessage();
            }
            catch (IOException e){
                e.getMessage();
            }
    }
} 
注:本实例只能有发送方先法,收到方,再发送,想要达到自由发送的效果,请参考Socket的多线程实例。
UDP网络编程DatagramSocket及DatagramPacket的简单使用 文章目录前言一、UDP和TCP网络通信比较二、UDP通信实现步骤三、UDP网络通信实现第一部分:服务端构建及向客户端发消息(1)创建服务端(2)接受客户端发送的数据第二部分:客户端接收服务端数据(1) 构建客户端(2) 向服务端发送数据第三部分:服务端接收数据后向客户端发数据第四部分:客户端接收服务端数据总结 前言 之前我们讲过使用TCP网络编程的有关用法,讲了如何使用ServerSocket和Socket来构建服务端和客户端,以及如何使用字节输入输出流来接收和发送数据. 今天我将讲述如何使用UDP网.. 阅读详情

相关推荐

滚雪球学Java(96):Socket编程,你必须得懂!

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

**My Coding Family** 1302

记DatagramSocket绑定端口socket.bind()报错java.net.SocketException: already bound

这段时间写一个 UDP 访问接口获取数据的功能。当然先鄙视下对方,非要走Socket,MLGJB搞得难受的很, 而本地受防火墙限制,不能使用随机端口,必须固定端口来接收数据, 由于本司做的是政务项目, 所以不能贴出生产代码, 有测试代码模拟下, 代码如下 DatagramSocket socket = new DatagramSocket(); socket.bind(new InetSoc...

sky274548769的博客 6031

网路编程-UDP-DatagramSocket、DatagramPacket

NULL 博文链接:https://xiumuyigen-sina-com.iteye.com/blog/909996

Java UDP通信:DatagramPacket与DatagramSocket 详解

一、UDP协议简介 UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。 UDP是基于IP的简单协议,不可靠的协议。 UDP的优点:简单,轻量化。 UDP的缺点:没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。 综上所述,UDP使用

s990420的博客 2万+

从IMU到机器人定位:手把手教你用ESKF(Error-State Kalman Filter)搞定传感器融合

本文详细介绍了如何使用ESKF(Error-State Kalman Filter)实现IMU与多传感器的融合,解决机器人定位中的积分漂移问题。通过代码示例和Gazebo仿真案例,展示了ESKF在自动驾驶和移动机器人中的核心应用,包括误差状态建模、预测过程实现和观测更新策略,帮助开发者掌握这一高效滤波技术。

weixin_33275503的博客 278

【Linux】实际项目应该如何完成?--安防监控系统项目的总结

到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。...

修成真的博客 6724

Java中的DatagramPacket与DatagramSocket的初步

1.基本概念:   a.DatagramPacket与DatagramSocket位于java.net包中   b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字   c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的协议。   之所以不可靠是因为发送方不负责数据是否发送成功,接收方收到数据时也不会

上帝派来的逗比 1253

QT插件学习系列(一) 初识QtPlugin

QT插件学习系列(一) 初识QtPlugin 1、 概述 为什么我们要学习插件化,其和 windows 导出 dll 有什么区别呢? 导出的动态库如果缺失,程序不能运行。但插件可以。 同一套代码,即可分别在 windows 下和 linux 下生成插件。 QT 本身提供两种插件支持,一种称为高级 API,一种称为低级 API。 高级API的作用是扩展 QT 程序本身,需要子类化 QT 提供的插件基类,例如现有的 QTSqlDriver,因此你可也以编写自己的 QTStyle 扩展 QT。 低级

L_Andy的专栏 3113

DatagramPacket和DatagramSocket

DatagramPacket 在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。 在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收...

云飞扬°的博客 6875

RIGOL DS1102E示波器新手必看:从开机到捕获第一个波形的5分钟指南

本文为RIGOL DS1102E示波器新手提供了一份快速上手指南。内容涵盖从开机、探头校准到捕获第一个波形的完整流程,重点解析了触发设置、自动测量等核心操作,并指出了探头衰减比设置等常见误区,帮助用户快速掌握这款经典数字示波器的基本使用方法。

dream的博客 738

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 497

网络编程:DatagramSocket和DatagramPacket

3.如果在创建DatagramPacket时指定了目标地址,但是没有对DatagramSocket调用connect方法,则DatagramSocket会保留其无连接的特性,即可以接收任何地址发送来的数据包。构造方法选择:根据需要选择合适的构造方法创建DatagramSocket实例,例如,可以创建一个未绑定的DatagramSocket或绑定到特定端口和地址的DatagramSocket。3.处理额外空格:在网络发送过程中,byte数组的大小问题可能导致包含多余的空格,接收数据时应先处理这些额外的空格。

m0_58379758的博客 1477

Calibre LVS错误排查实战:从Innovus到GDS的完整调试流程(附常见错误解析)

本文详细介绍了数字IC后端设计中,从Innovus工具输出数据到Calibre LVS物理验证的完整调试流程。文章系统性地讲解了LVS错误排查的方法论,包括报告解读、图形化定位以及针对器件不匹配、电源网络错误、短路开路等常见问题的深度解析与解决方案,旨在帮助工程师高效完成版图与原理图的一致性检查。

weixin_29218963的博客 775

DatagramPacket与DatagramSocket

1.基本概念:   a.DatagramPacket与DatagramSocket位于java.net包中   b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字   c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的协议。   之所以不可靠是因为发送方不负责数据是否发送成功,接收方收到数据时也不会   向发送方反馈

u010278862的专栏 924

基于STM32+华为云设计的智慧农业灌溉系统(2023升级版)(158)

本项目设计一种基于STM32的智慧农业监测系统。该系统能够检测空气温度、湿度、光强度和土壤湿度等关键指标,并自动调节浇水量,实现作物生长环境的精细化管理。同时,本项目还支持本地LCD屏幕数据显示和通过ESP8266上传数据到华为云物联网平台,同时搭建流媒体服务器实现摄像头远程监控。最重要的是,本项目将利用Qt开发Android手机APP,使用户可以远程查看监测情况,了解农作物生成情况。

1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

简单分析一下socket中的bind

  在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是...

weixin_33872660的博客 1190

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

socket编程之bind()函数

名称 bind() 把名字和套接字相关联 使用格式 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr,socklen_t *addrlen); 功能描述 当用socket()函数创建套接字以后,套接字在名称空...

weixin_30407099的博客 2221

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

网络编程之 DatagramSocket 类与 DatagramPacket 类(客户端收发消息)

DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类 实现两个客户端通过 UDP协议通信,使用DatagramSocket 和 DatagramPacket类 有如下几个步骤,分为客户端和服务端 1,客户端: 1),实例化DatagramSocket类(带上指定端口),创建客户端 2),准备数据,数据是以字节数组发送的 3),打包数...

临窗,听雨声 1万+

Datagramsocket和Datagrampacket

信息安全老师布置了一个作业,要求编写一个可以让两个人利用Java UDP进行聊天的小程序,要求利用Datagramsocket和Datagrampacket,由于Java没学好,对于这两个类很是陌生,于是通过查询资料,对他俩有了以下这点浅薄的认识 UDP传输数据类似于在海上运输货物,DatagramSocket就像两个通信港口的码头,而DatagramPacket就像运输货物的轮船 Datagrampacket类,用于封装UDP通信中发送或接收的数据 Datagramsocket类,表示用来发送和接收数据报

qq_44841839的博客 667

UDP通信:DatagramSocket、DatagramPacket详解

Java中的UDP通信 UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。 Java提供了DatagramSocket类作为基于UDP协议的Socket。 一、UDP发送数据 1)常用构造方法 方法名 说明 DatagramSocket() 创建一个默认的套接字,并绑定到本地地址和一个任意的端口号 DatagramPacket(byte[]

写代码的小抓头 3207

java使用DatagramSocket和DatagramPacket进行通信

一、DatagramSocket DatagramSocket是使用UDP协议的Socket,它的作用是接收和发送数据包,但是它本身并不能产生IO流 1、创建DatagramSocket对象 DatagramSocket() //创建一个数据包套接字,绑定到本机上任意一个可用的端口 DatagramSocket(DatagramSocketImpl) //创建一个绑定的数据报套接字, 与指定的datagramsocketimpl相关(一般不使用) DatagramSocket(SocketAdd.

qq_38345598的博客 5910

使用DatagramSocket与DatagramPacket传输数据

参考传智播客毕向东JAVA视频。 注: DatagramSocket发送的每个包都需要指定地址,而Socket则是在首次创建时指定地址,以后所有数据的发送都通过此socket。 A socket is an endpoint for communication between two machines. socket的意思为插座,因此可以理解为通信两方各有一个插座,这2...

apple01010105的博客 331
上一篇: JavaNote 3.2Socket
下一篇: JavaNote 3.4容器
LetsStudy
博客等级 码龄9年 96粉丝 323原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值