连接地址: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. [Leetcode][Python][DP]Regular Expression Matching

    # -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/regular-expression-matching/ Implement reg ...

  2. keep健身计划

    下一个月计划 1keep二周计划 2百度第一期学完 3百度前端技术学院提升

  3. 2013年 ACM 有为杯 Problem I (DAG)

    有为杯  Problem I DAG  有向无环图 A direct acylic graph(DAG),is a directed graph with no directed cycles . T ...

  4. ceph优秀博文

    ceph官方博文: http://ceph.com/community/blog/ rgw根据rgw用户来分pool存放数据 http://cephnotes.ksperis.com/blog/201 ...

  5. SGU 506.Subsequences Of Substrings

    求一个串S有多少子串subS满足s是subS的子序列.len(S)<=100000, len(s)<=100 直接扫一遍... ------------------------------ ...

  6. leetcode 31. Next Permutation(字典序的下一个)

    描述: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  7. javascript小练习—记住密码提示框

    px/px solid redpxpx]; var oTips = document.getElementById("tips"); oP.onmousemove = functi ...

  8. 本地搭建php环境

    AppServ 是 PHP 网页架站工具组合包,所包含的软件有:Apache[.Apache Monitor.PHP.MySQL.phpMyAdmin等,如果您的本地机器没有安装过php.mysql等 ...

  9. maven 常用命令及操作(转)

    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...

  10. 每天一个小算法(5)----找到链表倒数第K个结点

    估计这个问题在面试中被问烂了. 思路是先找到正数的第K个结点的指针pT,然后和指向头结点的指针pN一起向后移动,直到第K个指针指向NULL,此时pN指向的结点即倒数第K个结点. 如图: #includ ...