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

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

什么是Datagram?

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

  Java中使用DatagramDatagramPacket类。

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

  

  send()发送数据报。

  receive()接收数据报。

  

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

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

简单的UDP通讯实例

package com.example.network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class UdpUnit1
{
public static void main(String[] args) throws Exception
{
DatagramSocket datagramSocket = new DatagramSocket(); // 构造数据报的包
String str = "Hello World"; // 用了public DatagramPacket(byte buf[], int length,InetAddress address,
// int port)形式
DatagramPacket packet = new DatagramPacket(str.getBytes(),
str.length(), InetAddress.getByName("localhost"), 7000); // 发送数据包
datagramSocket.send(packet); // 接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buffer, 100);
datagramSocket.receive(packet2);
// 输出接收到的数据
System.out.println(new String(buffer, 0, packet2.getLength())); datagramSocket.close(); } }
package com.example.network;

import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UdpUnit2
{
public static void main(String[] args) throws Exception
{
DatagramSocket socket = new DatagramSocket(7000); // 收信息
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 1024); // 接收
socket.receive(packet);
// 输出
System.out.println(new String(buffer, 0, packet.getLength())); // 返回信息
String str = "Welcome!";
DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
str.length(), packet.getAddress(), packet.getPort());// 这里填入发送方的信息 socket.send(packet2); socket.close();
} }

  运行时首先运行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. Delphi 的接口机制——接口操作的编译器实现过程(2)

    接口对象的内存空间 假设我们定义了如下两个接口 IIntfA 和 IIntfB,其中 ProcA 和 ProcB 将实现为静态方法,而 VirtA 和 VirtB 将以虚方法实现: IIntfA =  ...

  2. GDKOI2015 Day1

    P1 题目描述: 判断一个环形字符串(或者减去一个字符之后)是否是回文串 solution: 1.hash 将字符串的前缀进行hash,然后将字符串翻转,再做一次hash,然后枚举对称轴,判断两边的h ...

  3. i美股投资研报--Michael Kors(IPO版) _Michael Kors(KORS) _i美股

    i美股投资研报--Michael Kors(IPO版) _Michael Kors(KORS) _i美股 i美股投资研报--Michael Kors(IPO版)

  4. 指定html内容下载为word文档

    解决思路是:获取html内容并传到后台,后台把html内容转换为输入流再传给浏览器,浏览器直接下载 1.获取html内容并传到后台 $("#zxjdck .ad-xzzy-anniu&quo ...

  5. 加入收藏夹的js代码(求兼容chrome浏览器的代码)

    从网上找了加入收藏夹的js代码,但不兼容chrome,不知道有没有兼容chrome的相关代码,希望有知道的告诉一下,谢谢! 代码如下 $("#id").click(function ...

  6. The Water Problem(排序)

    The Water Problem Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  7. VB6关于判断模态窗体的问题

    模态窗体也有人叫模式窗体,是否为模态窗体由Show方法的参数决定: 语法 object.Show style, ownerform Show 方法的语法包含下列部分: 部分 描述 object 可选的 ...

  8. Eclipse debug ‘Source not found’

    用Eclispe进行Debug时一直被一个问题所困扰:Source not found. 问题产生的原因是调试进入了一个没有源代码的jar包里. 简短说明: Edit Source Lookup Pa ...

  9. 算法导论——lec 10 图的基本算法及应用

    搜索一个图是有序地沿着图的边訪问全部定点, 图的搜索算法能够使我们发现非常多图的结构信息, 图的搜索技术是图算法邻域的核心. 一. 图的两种计算机表示 1. 邻接表: 这样的方法表示稀疏图比較简洁紧凑 ...

  10. android-supporting-multiple-devices

    There are a few common questions asked whenever development begins on a new Android app. What assets ...