Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
连接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952673.html
使用无连接的数据报(UDP)进行通信
什么是Datagram?
数据报是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。
Java中使用Datagram与DatagramPacket类。
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)进行通信的更多相关文章
- [未完成]关于Java网络编程总结
网络的七层结构: 第一层:物理层,网线. 第二层: 数据链路层,交换机.交换机有IP地址.这一层的数据叫做帧 第三层:网络层,数据包方向的定义,路由器.现在也有具有路由功能的交换机.主要将从下层接收到 ...
- Java - 网络编程完全总结
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...
- 【转载】Java 网络编程
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- java 网络编程复习(转)
好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...
- Java 网络编程----基本概念
网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...
- JAVA网络编程【转】出处不详
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- Java 网络编程(转)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 【转】JAVA 网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 初识Java网络编程
事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作.Socket ...
随机推荐
- 错误解决一_call time pass-by-reference removed
我的操作: 定义function my_function(&$param) 调用 my_function(&$value)错误来了:Call-time pass-by-referenc ...
- nodejs的url模块中的resolve()的用法总结
var url = require('url'); var a = url.resolve('/one/two/three', 'four') , b = url.resolve('http://ex ...
- 指定html内容下载为word文档
解决思路是:获取html内容并传到后台,后台把html内容转换为输入流再传给浏览器,浏览器直接下载 1.获取html内容并传到后台 $("#zxjdck .ad-xzzy-anniu&quo ...
- 新浪微博布局学习——妙用TabHost
前言 为了更好的开发Android应用程序,除了熟练掌握基本的UI组件和API外,还需要掌握一些技巧,而这些技巧可以通过阅读一些代码来提高,本系列将与大家分享一些新浪微博布局方面的收获,欢迎交流! 声 ...
- android 内存优化
OOM 内存泄漏引起很多问题: 1:节目卡顿.反应慢(高内存使用情况JVM 虚拟机的频繁离职GC) 2:消失 3:直接崩溃 ANDROID 内存面临的问题 1: 有限的堆内存,原始仅仅有16M 2:内 ...
- React.js 是什么?
在相当长的一段时间内,我很努力地去尝试理解 React 是什么以及它在应用架构上的健壮程度.这篇文章解答了我希望别人为我解答的疑惑. React 是什么? 和 Angular,Ember,Backbo ...
- Ubuntu常用命令整理
最近开始用Ubuntu系统了,各种命令很不熟练,想收集一下,以便以后查阅,用这个时常更新的随笔 1.Ubuntu设置与修改用户密码 设置ROOT密码方法:sudo passwd root ,然后输入密 ...
- 红豆带你从零学C#系列之——初识C#
问题一:什么是C#? C#是微软公司在2000年新推出的一款运行在.NET Framework平台上面的编程语言,这个.NET Framework平台又怎么去理解呢?举个例子来说好了,一个土著族人只会 ...
- IIS发布网站后局域网其他用户不能访问问题(转)
如果本机能正常访问,而局域网其他用户不能访问,那么判断的结果很可能是防火墙问题. 解决方法: 既然问题出在Windows7或Windows Server 2008 R2的防火墙上,那么我们可以有以下两 ...
- Fiddler [Fiddler] Connection to localhost. failed.
原文地址:http://blog.chinaunix.net/uid-20675015-id-1899931.html 在用Fiddler调试本机的网站时,即访问http://localhost,返回 ...