Java基础——实现UDP发送数据和接收数据
来源:互联网 发布:中国股市现状 知乎 编辑:程序博客网 时间:2024/06/05 20:34
有一段时间没有写博客了,差不多两个月了,怎么说呢,这就是那个叫“三分热度”吧,我的三分热度时间不长,但是呢,这个三分热度时不时的来一次,这也是一个小幸运吧。
今天来聊聊javaEE 的知识,其实也是网络通信的知识,现在先从一个小小的demo开始入手,慢慢的走向项目实战。
我们今天的小demo有两个类,分别代表着发送端和接收端,这里主要的两个类是DatagramSocket和DatagramPacket,其他的都是没什么难度的。
解释一下什么是UDP:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
后期我们还会讲到TCP,都是可以传输数据的,但是各有各的特点。
好,那我们先来实现UDP接收端:
public class Save { public static void main(String[] args) throws Exception { // 定义一个接收端,并且指定了接收的端口号 DatagramSocket socket = new DatagramSocket(8080); while (true) { byte[] buf = new byte[1024]; // 解析数据包 DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String ip = packet.getAddress().getHostAddress(); buf = packet.getData(); String data = new String(buf, 0, packet.getLength()); System.out.println("收到 " + ip + " 发来的消息:" + data); } }}
其实不是很难,代码就几行,并且把数据打印出来了。
然后看看发送端:
public class Send { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(); byte[] buf = "ge men lai le".getBytes(); //将数据打包 DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.111.206"), 8080); socket.send(packet); socket.close(); }}
结合注释,我相信很容易理解了。值得注意的是192.168.111.206是你自己的本地ip,怎么获取呢,比较简单的方式是:新建一个java类,然后在主方法里面进行获取,具体代码是:
public class Mexception { public static void main(String[] args) throws UnknownHostException { System.out.println(InetAddress.getLocalHost().toString()); }}
好了,只要掌握了这些,实现一个简易的收发功能是没问题了。
- Java基础——实现UDP发送数据和接收数据
- java——UDP发送和接收数据
- C# WinForm实现UDP发送和接收数据
- UDP利用多线程实现数据的发送和接收
- udp发送接收数据
- JAVA---udp数据的发送与接收
- Java NIO UDP发送接收数据
- 黑马程序员——UDP发送数据,接收数据实例
- [C#] 接收和发送UDP数据
- c#中UDP数据发送和接收
- 使用UDP协议发送和接收数据
- 使用UDP协议发送和接收数据
- 使用UDP协议发送和接收数据
- udp 发送和接收结构体数据
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- UDP发送与接收数据
- udp下接收发送数据
- UDP协议接收数据与发送数据
- 【数据结构】算法10.4-10.5 插入排序-希尔
- git使用方法
- hdu5000 Clone dp
- Java线程之线程的五种状态
- lightoj 1021 从当前转移到其他状态的状压dp
- Java基础——实现UDP发送数据和接收数据
- 数据库实战(四)数据库主从复制
- R语言内存管理
- 常用less
- 极光推送注册、接收、点击打开推送通知
- Python学习笔记
- trie树字典树的插入和删除
- 第一行代码笔记,第六章-----详解数据存储
- 第十课 使用java开发spark 实战