UDP学习1(发送端demo)

  最近是项目的最后阶段——系统测试,刚好今早有点空余时间,利用这点时间用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 }
View Code

 

 打开命令行,通过javac编译生成class文件,这个时候我遇到了一个小问题,看下图:

UDP学习1(发送端demo)

经过查看,我的记事本用的是UTF-8编码,而jvm默认的是GBK编译,从而造成了编译失败,于是将记事本改成GBK编码,再编译,终于成功了,接着运行也ok了,因为是无连接的,数据是发出去了,但是没有服务端接收,造成了数据的丢失,下一篇文章中,我将学习如何在接收端接收数据.

UDP学习1(发送端demo)

你可能感兴趣的:(demo)