最近是项目的最后阶段——系统测试,刚好今早有点空余时间,利用这点时间用Java写了一个UDP发送数据的demo,本人最近也正在学习Java(目前在做asp.net web开发),欢迎各位指点刚毕业不久的小菜鸟。下面进入正文。
什么是UDP?UDP就是网络传输协议的其中一种,网络间的应用程序想互相传输数据可以遵循的一种协议。按个人理解,它有以下这几个特点:1.无连接的,通俗点来说发送端无需确认接收端是否开启,不需要建立连接,发送端也可以将数据发送出去,不过这个时候会造成数据包的丢失;2.不可靠的,因为它是无连接的,从而从发送端到接收端之间数据的传递会造成丢失,协议本身不做出任何的检测和提示,所以是不可靠的;3.速度快(相对应TCP来说),因为发送端在传输数据包的过程中不需要检测接收端是否开启,而TCP则相反;4.网络开销小(相对应TCP来说),它的信息包标题是八个字节,而TCP则是20个字节;5.面向报文的。总结完UDP的特点后,下面就是本人的一个通过UDP发送数据包的demo.
(TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。)
只要明确通过UDP发送数据的流程,代码写起来就容易简单了.步骤如下:1.建立发送端socket服务(需要明确发送端地址);2.准备发送的数据包(需要明确发送到哪里哪个端口);3.发送;4.关闭socket服务,因为socket依赖底层系统资源,需要将它关闭.通过Notepad++写了如下代码:
1 import java.net.*; 2 class UDPSendDemo 3 { 4 public static void main(String[] args) throws Exception 5 { 6 //建立发送端socket服务 7 DatagramSocket ds=new DatagramSocket(10000); //10000为发送端端口号 8 //准备需要发送的数据包 9 byte[] buf="UDP lai le".getBytes(); 10 //这里的ia是指接收端地址,在本地测试所以干脆用本地也作为接收端.12222为接收端端口号 11 InetAddress ia=InetAddress.getByName("localhost");//接收端地址 12 DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,12222); 13 //发送 14 ds.send(dp); 15 //关闭服务 16 ds.close(); 17 } 18 }
打开命令行,通过javac编译生成class文件,这个时候我遇到了一个小问题,看下图:
经过查看,我的记事本用的是UTF-8编码,而jvm默认的是GBK编译,从而造成了编译失败,于是将记事本改成GBK编码,再编译,终于成功了,接着运行也ok了,因为是无连接的,数据是发出去了,但是没有服务端接收,造成了数据的丢失,下一篇文章中,我将学习如何在接收端接收数据.