1. UDP协议发送数据 和 接收数据

UDP协议发送数据:
  • 创建发送端的Socket对象
  • 创建数据,并把数据打包
  • 调用Socket对象的发送方法,发送数据包
  • 释放资源

 UDP协议接收数据:

      • 创建接收端的Socket对象
      • 创建数据包,接收数据(接收容器)
      • 调用Socket对象的接收方法,接收数据包
      • 解析数据包,并显示在控制台
      • 释放资源

2. 代码实现

(1)首先我们先写发送端的程序,如下:

 package com.himi.udpDemo;

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; /**
*
* UDP协议发送数据:
* 1. 创建发送端的Socket对象
* 2. 创建数据,并把数据打包
* 3. 调用Socket对象的发送方法,发送数据包
* 4. 释放资源
*
*/
public class UdpSendDemo {
public static void main(String[] args) throws IOException {
//创建发送端的Socket对象,这里使用的UDP使用的客户端的Socket对象类是DatagramSocket.
//DatagramSocket:DatagramSocket()
DatagramSocket ds = new DatagramSocket(); //创建数据,并把数据打包
//DatagramPacket:此类表示数据报包
/**DatagramPacket(byte[] buf, int length, InetAddress address, int port)
** 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
*/
//创建数据
byte[] bytes = "风云雄霸天下,风云必胜. 风云合璧,摩柯无量. 圣心诀,玄武真功".getBytes();
//IP地址对象
InetAddress address = InetAddress.getByName("49.123.72.145");
//端口号
int port = 10086;
//数据打包
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port); //调用Socket对象的发送方法,发送数据包
//public void send(DatagramPacket p)
ds.send(dp); //释放资源
ds.close(); } }

(2)其次实现的是接收端的代码,如下:

 package com.himi.udpDemo;

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; /**
*
* UDP协议接收数据:
* 1. 创建接收端的Socket对象
* 2. 创建数据包,接收数据(接收容器)
* 3. 调用Socket对象的接收方法,接收数据包
* 4. 解析数据包,并显示在控制台
* 5. 释放资源
*
*/ public class UdpReceiveDemo { public static void main(String[] args) throws IOException {
// 创建接收端的Socket对象
//DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口
DatagramSocket ds = new DatagramSocket(10086); //创建数据包,接收数据(接收容器)
//DatagramPacket(byte[] buf, int length)
byte[] bytes = new byte[1024];
int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, length); //调用Socket对象的接收方法,接收数据包
// public void receive(DatagramPacket p)
ds.receive(dp);//阻塞式方法 //解析数据包,并显示在控制台
//获取对方的IP
//public InetAddress getAddress()
InetAddress address = dp.getAddress();
String IP = address.getHostAddress(); //public byte[] getData():获取数据的缓冲区
//public int getLength():获取数据的实际长度
byte[] bys = dp.getData();
int len = dp.getLength();
String s = new String(bys,0,len); System.out.println("发送端"+IP+"的数据:"+s); //释放资源
ds.close(); } }

(3)运行:

-->先运行接收端(类似于先开启服务器)

-->再运行发送端,这个时候,上面的接收端控制台,就会显示发送端发送过来的数据,效果如下:

Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据的更多相关文章

  1. Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

    1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...

  2. Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)

    使用HttpClient进行Get方式通信,通过HttpClient建立网络链接,使用HttpGet方法读取数据,并且通过Response获取Entity返回值. 使用HttpClient进行Post ...

  3. Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

    1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2.  代码示例: (1)SendThread.java,如下: package com.himi.udpDemo2; ...

  4. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

    1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: package com.himi.updDemo1; import java.io.IOException ...

  5. Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)

    使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...

  6. Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)

    使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...

  7. Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)

    联合网上资料学习:http://www.open-open.com/lib/view/open1451223702339.html 一.Volley的介绍 1. Volley简介 在这之前,我们在程序 ...

  8. Java基础知识强化之网络编程笔记19:Android网络通信之 HttpClient和传统Post、Get方式的区别

    1. HttpClient是什么 ?     HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 ...

  9. Java基础知识强化之网络编程笔记01:InetAddress类的概述和使用

    1. InetAddress类 InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,Datagr ...

随机推荐

  1. jquery mobile backbone

    http://www.appliness.com/getting-started-with-html-mobile-application-development-using-jquery-mobil ...

  2. 【BZOJ 3476】 线段树===

    59  懒惰的奶牛贝西所在的牧场,散落着 N 堆牧草,其中第 i 堆牧草在 ( Xi,Yi ) 的位置,数量有 Ai 个单位.贝西从家移动到某一堆牧草的时候,只能沿坐标轴朝正北.正东.正西.正南这四个 ...

  3. sql server 2005+ 行转列

    )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go , , '') from tb group by id

  4. Linux上使用Qt Creator进行C/C++开发

    目录[-] 1.安装Qt Creator和基础构建环境(以Ubuntu为例): 2.把自动完成快捷键"Ctrl+空格"改为"Alt+/"或者"Shif ...

  5. ASPNET5中的那些K

    ASPNET5中的那些K ASP.NET 5最大的变化是什么?首当其冲的就是多了很多K,K表示的是ASP.NET vNext的项目代号“Project K”,但很容易让人想到一个汉字——“坑”,希望K ...

  6. linearizing the depth in vertex shader

    please refer to http://www.mvps.org/directx/articles/linear_z/linearz.htm When using a programmable ...

  7. LRU 缓冲池 (不考虑多线程)

    lru:(转)LRU算法的实现 什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的.关于操作系统的内存管理,如何节省利用容 ...

  8. HDOJ/HDU 2140 Michael Scofield's letter(字符转换~)

    Problem Description I believe many people are the fans of prison break. How clever Michael is!! In o ...

  9. Unity给力插件之MeshBaker

    这是一个用来合并网格.材质.贴图的插件. 其实网上也有一些比较详细的使用说明,但是真实操作起来时,总是有一些搞不清bug.而且,作为功能比较全的插件,在Unity版本更新时,也难免会一些不兼容的地方. ...

  10. hadoop家族之mahout安装

    步骤一.下载mahout  http://www.apache.org/dyn/closer.cgi/mahout/ 我下载的是 mahout-distribution-0.9.tar.gz 16-F ...