1、不可靠的、效率高、数据报(数据打成一个小包一个小包地往外发)、非连接。
2、UDP是非连接的,因此严格来说并不区分服务器端和客户端。
3、UDP通信过程:UDP都是通过字节数组进行对话的。
     "服务器"端:接数据
          (1)新建字节数组,用来接收对方发过来的数据
               byte buf[] = new byte[1024];
          (2)创建数据包Socket
               DatagramSocket ds = new DatagramSocket(5678);//端口号5678是udp的5678,TCP还有一个端口5678
          (3)新建包裹DatagramPacket ,包裹把byte字节数组都占满了,第二个参数表示包裹在数组中占的长度。当调用receive()方法接收数据时,将接收到的内容存放到字节数组buf中。
               DatagramPacket  dp = new DatagramPacket (buf, buf.length);
          (4)接收对方发来的数据,有人发数据,就把数据放在包袱里,receive也是阻塞式的方法,如果没有人发数据,就一直等着。
               ds.receive(dp);
               System.out.println(new String(buf,0,dp.getLength()));//把包袱里有的内容转换成字符串输出String(buf,0,dp.getLength())表示通过数组的一部分构建字符串。dp.getLength() 表示字节数组里到底占用了多少空间。
                ds.close();
     “客户”端:发数据
            (1) 将要发送的内容转换成字节数组
               byte[] buf = (new String("Hello")).getBytes();
            (2)创建包裹,并把字节数组放进去,InetSocketAddress是SocketAddress的子类表示Ip地址。
               DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
            (3)创建数据包Socket
               DatagramSocket ds = new DatagramSocket(9999);//9999是客户端的端口
            (4)发送信息
               ds.sent(dp);
               ds.close();
          以上例子中传的是String字符串类型的消息;如果要传Long类型的消息,需要通过ByteArrayOutputStream来传消息;服务器端接收时用ByteArrayInputStream。
          客户端:long n = 1000L;
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          DataOutputStream dos = new DataOutputStream(baos );//为了写入long型的数据,采用DataOutputStream处理流
          dos.writeLong(n);//向字节数组输出流中写数据
          byte[]  buf = baos.toByteArray();//将流中的内容转换成字节数组,进而创建DatagramPacket,并用UDP的 DatagramSocket发出消息。
          接下来与上面的例子一致。
          服务器端:
          ds.receive(dp);
          ByteArrayInputStream bais = new ByteArrayInputStream(buf);
          DataInputStream dis = new DataInputStream(bais);
          System.out.println(dis.readLong());
注意:在UDP中用的最多的流就是ByteArrayOutputStream、DataOutputStream和ByteArrayInputStream、DataInputStream

网络编程学习笔记(三)UDP的更多相关文章

  1. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  2. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  3. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  4. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  5. JAVA UDP网络编程学习笔记

    一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...

  6. Linux C网络编程学习笔记

    Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...

  7. Java Socket网络编程学习笔记(一)

    0.前言 其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章, 是传统IO(BIO)相关的内容,故在此 ...

  8. 网络编程学习笔记:Socket编程

    文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect ...

  9. 网络编程学习笔记一:Socket编程

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  10. 网络编程学习笔记--1.socket可读可写条件

    转至 :http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为它考察被面试者对网络编 ...

随机推荐

  1. javaWeb学习总结(8)- JSP中的九个内置对象(4)

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  2. python3-如何正常使用HTMLTestRunner.py,生成自动化测试报告

    其实HTMLTestRunner.py是基于python2开发的,为了使其支持python3环境,需要对其的部分内容进行修改.下面我们通过编辑器打开HTMLTestRunner.py文件(编辑器可以选 ...

  3. 深入探索C++对象模型(四)

    Function语意学(The Semantics of Function) static member functions不可能做到的两点:(1)直接存取nonstatic数据,(2)被声明为con ...

  4. 抓包工具 - HttpWatch

    HttpWatch是功能强大的网页数据分析工具,集成在IE工具栏,主要功能有网页摘要.cookies管理.缓存管理.消息头发送/接收,字符查询.POST数据.目录管理功能和报告输出.HttpWatch ...

  5. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  6. python基础操作_集合_三元运算

    #使用操作文件的时候,可以使用with函数#with open('E:\info.txt','a+') as fr#fr这个值可以是任意值# :#for line in fr:'''with open ...

  7. C语言进制转换的一个小错误

    今天学妹问了一个问题,问题是这样的 有以下程序 #include <stdio.h> void main(){ int  m=0256,n=256; printf("%o %o& ...

  8. 写JS自执行函数时要注意的

    JS是非强类型语言,且IDE也不够智能,所以经常会在语句结束时漏写了分号,一般情况下这是不影响运行的, 但如果后面跟上的是一段自执行的函数,就会报出 "..... is not functi ...

  9. Bash内置命令exec和重定向

    Bash内置命令exec可以替换当前程序而不需要启动一个新的进程,可以改变标准输入和输出而不需要启动一个新的子进程.如果文件用exec打开,read命令就会把文件指针每次指向下一行直到文件的末尾,如果 ...

  10. SQL中创建外键约束

    alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)