DatagramSocket
构造方法摘要,总共有5个构造方法
DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口。

DatagramSocket(DatagramSocketImpl impl)
创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。

DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。

DatagramSocket(int port, InetAddress laddr)
创建数据报套接字,将其绑定到指定的本地地址。

DatagramSocket(SocketAddress bindaddr)
创建数据报套接字,将其绑定到指定的本地套接字地址。

常用方法是
close()
关闭此数据报套接字。

receive(DatagramPacket p)
从此套接字接收数据报包。

send(DatagramPacket p)
从此套接字发送数据报包。

其中接收和发送的时候,涉及到类DatagramPacket,
DatagramPacket有6个构造方法,其中常用的两个构造方法是

DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

基于UDP通信的基本模式,最简单的模式,使用方法步骤如下
1.将数据打包(DatagramPacket),然后发送出去
2.接收别人的发来的数据包(DatagramPacket),然后查看数据包

其中发送数据包时的步骤
(1).使用DatagramSocket()方法创建一个套接字
(2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int port) 打包要发送的数据
(3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包

其中接收数据包时的步骤
(1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
(2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
(3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据

注:DatagramPacket与DatagramSocket位于java.net包中,所以使用的时候要记得先
导入这个包,而且在连接创建的过程中会出现各种异常,记得做异常处理

下面写一个练习代码,其中这两个类分别对对方接收和发送信息

其中一个类的代码

//
import java.net.*;
public class UdpA {
public static void main(String[] args) throws Exception {
// 其中发送数据包时的步骤
// (1).使用DatagramSocket()方法创建一个套接字
// (2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int
// port) 打包要发送的数据
// (3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包
DatagramSocket socket = new DatagramSocket();// 这里可以不用绑定端口,由系统自动分配
byte[] buf = "您好,我是UdpA,很高兴认识你".getBytes();
// 我们把数据包要发送到是IP和端口分别是本机的Ip和10000端口
DatagramPacket packetSend = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
socket.send(packetSend);
//接收数据
DatagramPacket packetBack = new DatagramPacket(new byte[1024], 1024);
socket.receive(packetBack);
System.out.println("对方发来的信息为:" + (new String(packetBack.getData(), 0, packetBack.getLength())));
socket.close();
}
}

这个是另一个类的代码

//
import java.net.*;
public class UdpB {
/**
* UdpB先接收数据,然后回发数据 连接创建的过程中会出现各种异常,记得做异常处理
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 接收数据包时的步骤
// (1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
// (2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
// (3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据
DatagramSocket socket = new DatagramSocket(10000);// 绑定UdpB的端口为10000
System.out.println("UdpB开启了");
DatagramPacket packetRecevice = new DatagramPacket(new byte[1024], 1024);
socket.receive(packetRecevice);
String ip = packetRecevice.getAddress().getHostAddress();// 取得发送方的IP
int port = packetRecevice.getPort();// 取得发送方的端口
String data = new String(packetRecevice.getData(), 0, packetRecevice.getLength());// 取得发送过来的数据
System.out.println("接收到的数据为:" + data + " 其中发送方的IP为:" + ip + " 端口为:" + port);// 打印接收到的数据
// 然后再发一个信息到对方
byte[] msg = "Hello,我就是UdpB哦".getBytes();
// 根据上面取得的对方的IP和端口,我们把信息反馈回去
DatagramPacket packetBack = new DatagramPacket(msg, msg.length, InetAddress.getByName(ip), port);
socket.send(packetBack);
// 最后关闭套接字
 socket.close();
}
}

好吧,一边看书一边看视频,还要一边练代码,进度好慢啊.

转载于:https://www.cnblogs.com/fylx/p/3957960.html

JAVA学习之网络编程UDP篇相关推荐

  1. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  2. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

  3. java 学习笔记-网络编程(八)

    网络编程 标签:学习各种网络协议的桥梁 什么是计算机网络 计算机网络的作用:资源共享和信息传递. 计算机网络的组成: a) 计算机硬件:计算机(大中小型服务器,台式机.笔记本等).外部设备(路由器.交 ...

  4. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  5. JAVA网络编程 -UDP篇(简单实现网络聊天)

    通过UDP实现网络聊天 多线程实现UDP网络聊天 1. 编写UDP发送线程UdpSendThread import java.io.BufferedReader; import java.io.IOE ...

  6. java学习之网络编程

    相关知识点: Transient:Java中的关键字,只能修饰变量,不能修饰类和方法. 作用:使被修饰的变量无法被序列化. 拓展:一个静态变量,无论是否被transient修饰都无法被序列化.若静态变 ...

  7. 【Java学习】网络编程1

    网络上两台主机的交互 ①根据IP找到对方主机 ②数据发送到对方指定的应用程序上,为了表示这些应用程序,引入了端口的概念. 常用端口: wed端口80 MySQL端口3306 有效端口 0~65535 ...

  8. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  9. 学习Java第十九天(一):1、Java中的网络编程

    1.Java中的网络编程 什么是网络? 在计算机领域中网络是信息传输,接收共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 作用:信息传输,资源共享 有点:资源共享免费 O ...

  10. JAVA基础11 网络编程

    JAVA基础 11.网络编程 1.什么是网络?网络模型?网络四要素? 1.网络 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 资源的 ...

最新文章

  1. k-means-algorithm
  2. Python中小整数对象池和大整数对象池
  3. Linux运维:如何根据端口号查看哪个应用占用?
  4. 在虚拟机中安装和配配置 MOSS2007 全过程
  5. qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...
  6. Python 用for循环实现猜数字游戏
  7. html 小于号 乱码,shell重定向(大于号,小于号,左右,21,)
  8. iPhone 12 Pro真机照首曝光:无刘海再添实锤?
  9. XSS-Game level 12
  10. 穷人变富的过程中,最大的阻碍是什么?
  11. ALGO-84 大小写转换
  12. 基于HFSS的圆极化阵列天线设计
  13. 《Spring实战(第5版)》Spring in Action, Fifth Edition 官方在线阅读及源码下载
  14. Android Modem修改点以及修改方法
  15. 【BSP视频教程】STM32H7视频教程第14期:超干●货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)
  16. JS原生实现照片抽奖
  17. 有限Abel群的一维复表示
  18. mnist手写数字模型训练、保存、加载及图片预测
  19. SHA256sum系列命令检测文件完整性
  20. 全球5G手机最新排名!

热门文章

  1. C程序设计语言(2)文摘
  2. 学习Linux的七点忠告
  3. debian英文环境中中文输入
  4. Property Bags Object Model中的小“陷阱”
  5. 写这么骚的代码,真不怕被同事揍么?
  6. 企业API接口设计之token、timestamp、sign具体实现
  7. Docker 架构原理剖析,万字详解!
  8. Java 9 新特性,看这里就明白了
  9. 32岁程序员推拿一小时差点丧命!医生说按错这个地方
  10. 字节跳动年底再招 10000 人,前端工程师非常紧缺!