连接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952673.html

  使用无连接的数据报(UDP)进行通信

什么是Datagram?

  数据报是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。

  Java中使用DatagramDatagramPacket类。

  DatagramSocket类利用UDP协议来实现客户与服务器的Socket。

  

  send()发送数据报。

  receive()接收数据报。

  

  可以用写信寄信的例子来类比UDP通信。

  此时DatagramPacket就相当于一个包装了信封的信件。填好地址和接收人之后,就可以寄出去。

简单的UDP通讯实例

  1. package com.example.network;
  2.  
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6.  
  7. public class UdpUnit1
  8. {
  9. public static void main(String[] args) throws Exception
  10. {
  11. DatagramSocket datagramSocket = new DatagramSocket();
  12.  
  13. // 构造数据报的包
  14. String str = "Hello World";
  15.  
  16. // 用了public DatagramPacket(byte buf[], int length,InetAddress address,
  17. // int port)形式
  18. DatagramPacket packet = new DatagramPacket(str.getBytes(),
  19. str.length(), InetAddress.getByName("localhost"), 7000);
  20.  
  21. // 发送数据包
  22. datagramSocket.send(packet);
  23.  
  24. // 接收数据包
  25. byte[] buffer = new byte[1024];
  26. DatagramPacket packet2 = new DatagramPacket(buffer, 100);
  27. datagramSocket.receive(packet2);
  28. // 输出接收到的数据
  29. System.out.println(new String(buffer, 0, packet2.getLength()));
  30.  
  31. datagramSocket.close();
  32.  
  33. }
  34.  
  35. }
  1. package com.example.network;
  2.  
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5.  
  6. public class UdpUnit2
  7. {
  8. public static void main(String[] args) throws Exception
  9. {
  10. DatagramSocket socket = new DatagramSocket(7000);
  11.  
  12. // 收信息
  13. byte[] buffer = new byte[1024];
  14. DatagramPacket packet = new DatagramPacket(buffer, 1024);
  15.  
  16. // 接收
  17. socket.receive(packet);
  18. // 输出
  19. System.out.println(new String(buffer, 0, packet.getLength()));
  20.  
  21. // 返回信息
  22. String str = "Welcome!";
  23. DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
  24. str.length(), packet.getAddress(), packet.getPort());// 这里填入发送方的信息
  25.  
  26. socket.send(packet2);
  27.  
  28. socket.close();
  29. }
  30.  
  31. }

  运行时首先运行UdpUnit2,因为它开始时是在等待接收;然后运行UdpUnit1,它向UdpUnit2发送了“Hello World”的信息,UdpUnit2接收到信息后,返回“Welcome!”。

  比较奇怪的一个地方就是Welcome后的感叹号在UdpUnit1接收到并输出后显示的是问号。

  原因不详,(难道这就是说明UDP传输数据不可靠的证据?)望达人指点。

参考资料

  圣思园张龙老师Java SE系列视频教程。

Java 网络编程(六) 使用无连接的数据报(UDP)进行通信的更多相关文章

  1. [未完成]关于Java网络编程总结

    网络的七层结构: 第一层:物理层,网线. 第二层: 数据链路层,交换机.交换机有IP地址.这一层的数据叫做帧 第三层:网络层,数据包方向的定义,路由器.现在也有具有路由功能的交换机.主要将从下层接收到 ...

  2. Java - 网络编程完全总结

    本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...

  3. 【转载】Java 网络编程

      本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...

  4. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  5. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  6. Java 网络编程----基本概念

    网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...

  7. JAVA网络编程【转】出处不详

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  8. Java 网络编程(转)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  9. 【转】JAVA 网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  10. 初识Java网络编程

    事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作.Socket ...

随机推荐

  1. gdb的user-define command

    搜索: user-defined例子. # save this file in ~/.gdb or some where easy to find. # then in ~/.gdbinit add ...

  2. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)

    目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备. 准备知识: 简单的说,PCI 设备分3个空间. 配置空间,IO空间,内存地址空间. PCI设备厂家决定了外设是使用IO空间还是 ...

  3. 用showModalDialog写的简单弹出框传参与反参

    vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) sURL -- 必选参数,类型:字符串.用来指定对话框要 ...

  4. drupal7中CKEditor开启上传图片功能

    在drupal建站中,所见即所得编辑器提供了友好的界面.也提高开发效率,而CKEditor是一款非常不错的编辑器.定制性相当高,在这推荐给大家. CKEditor和其它模块(IMCE)搭配下在文字排版 ...

  5. 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  6. SQL学习之分组数据Group by

    简介:"Group By"根据字面上的意思理解,就是根据"By"后面指定的规则对数据进行分组(分组就是将一个数据集按照"By"指定的规则分成 ...

  7. Xcode工程使用CocoaPods管理第三方库新建工程时出现异常

    Xcode工程使用CocoaPods管理第三方库新建工程时出现异常 Xcode工程使用CocoaPods管理第三方库新建工程时出现错误工程使用CocoaPods管理第三方库,在新的目录update版本 ...

  8. WPF属性与特性的映射(TypeConverter)

    1,定义一个类 public class Human { public string Name { get; set; } public Human Child { get; set; } } 2在X ...

  9. Qt QToolTip 控件背景的 QSS 设置方法(摘抄)

    Qt/C++/CSS: QTooltip stylesheet background colour Hi there, I've recently come across a problem deve ...

  10. leetcode Climbing Stairs python

    class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int " ...