上午给大家简单介绍了一下TCP网络通信的知识,现在就为大家补充完整网络编程的知识,关于UDP的通信知识。

  UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

  这种文字性的描述,我就不再赘述,相关方面的文字介绍百度上多的很,我就直接给大家介绍代码了。

一、基于UDP网络编程代码:

  服务器端

public class TestUDPServer {

    /**服务器端代码
* @param args
* 对于UDP和TCP的端口号,首先我们可以任意设置,但必须保证范围在65536以内
* UDP和TCP的端口号没有关联,也就是说,UDP和TCP各有65536个端口
*/
public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];//设置存放数据的字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5888);//设置端口号
while(true){
ds.receive(dp);//接收客户端发过来的请求数据
System.out.println(new String(buf, 0, dp.getLength()));
//new String(buf, 0, dp.getLength()):String的构造方法,把一个字节数组转化为一个String类数据
}
}
}

  客户端

public class TestUDPClient {

    /**客户端代码实例
* @param args
* SocketAddress:网络上的地址,不但包括IP,还包括端口号等等
* InetAddress:IP地址的超级
* InetSocketAddress:IP地址+端口号
*/
public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];
buf = (new String("Hello")).getBytes();//将String类型的数据转换为字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
ds.send(dp);//向服务器发送数据
ds.close();
}
}

关于代码的细节讲解,我已经在其中进行注释,大家如果需要学习,可以直接拷贝,以上代码均是完整的,可以直接运行。

二、基于UDP的数据传输:

  服务器端

public class TestUDPServer1 {

    public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];//设置存放数据的字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5888);//设置端口号
while(true){
ds.receive(dp);//接收客户端发过来的请求数据
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readLong());
}
}
}

  客户端

public class TestUDPClient1 {

    public static void main(String[] args) throws Exception{
Long L = 10000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);//DataOutputStream:可以直接写一个Long类型的数据
dos.writeLong(L);
byte [] buf = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
ds.send(dp);//向服务器发送数据
ds.close();
}
}

  你一定有这样一个疑问,这有什么用处呢?好吧,我简单给你介绍一下,关于这种Long类型数据的传输在网络游戏中用处极多,为什么这么说呢?比如你在极品飞车中,系统要把你实时的在3维空间中的位置信息发送到别的玩家系统中,因为游戏要求传输速度必须快,所以基于UDP的数据传输在游戏开发过程中用处最多。

  以上只是一些基本的UDP编程代码,只为给大家简单介绍,让大家有一点的了解。

  声明:以上内容如有不当,烦请留言。谢谢

JAVA--网络编程(UDP)的更多相关文章

  1. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  2. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...

  3. java网络编程(UDP详解)

    UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...

  4. JAVA网络编程--UDP通信

    首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑por ...

  5. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  6. Java网络编程(UDP协议:接收端)

    package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...

  7. Java网络编程(UDP协议:发送端)

    package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...

  8. java网络编程UDP

    图片来自网络 [发送端] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSoc ...

  9. Java网络编程——UDP实例

    UDPSendDemo import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  10. Java网络编程(UDP协议-聊天程序)

    接收端: package WebProgramingDemo; import java.net.DatagramPacket; import java.net.DatagramSocket; publ ...

随机推荐

  1. js获取select标签选中的值

    <p>        城市:         <select id="Select1" name="D1">            &l ...

  2. ARCGIS自定义下拉列表

    1  创建一个geodatabase数据库 2 点击属性--->Domain-->>输入名称,在下面的属性设置中选择coded value 3  在下面的列表中输入下拉列表中可供选择 ...

  3. Install Hbase

    1. You should guarantee you have installed hadoop on your computers. 2. Download and uncompress the ...

  4. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  5. 从mac终端创建cocos2d-x项目在xcode和eclipse正常运行环境配置

    一.创建可以同时运行在xcode和eclipse的项目: 1.打开mac终端,进入cocos2d-x目录下的tools/project-creator,执行命令./create_project.py ...

  6. [Java基础]字符串

    1.字符串特点 字符串是常量,创建之后不能修改: 字符串的内容一旦修改,就会马上创建一个新的对象: 字符串实际为一个char value[]={'a','a'};数组: 2.==与equal判断字符串 ...

  7. SAP HANA专题分析目录

    针对HANA的关键技术领域, 做深度解析. 1. HANA开发规范 HANA 各种对象的应用解析.版本管理,开发规范. 2. HANA系统管理 用户.系统权限.数据权限的深度解析. HANA系统配置. ...

  8. gulp实用插件总结

    gulp-sass:预编译sass; gulp-imagemin:压缩png.jpj.git.svg格式图片 gulp-minfy-css:压缩css文件 gulp-rename 重命名文件,把一个文 ...

  9. highcharts 不显示X轴 Y轴 刻度

    xAxis: { tickWidth:0,        //设置刻度标签宽度 lineColor:'#ffffff',//设置坐标颜色 lineWidth:0,        //设置坐标宽度 la ...

  10. Android 高仿微信支付密码输入控件

    像微信支付密码控件,在app中是一个多么司空见惯的功能.最近,项目需要这个功能,于是乎就实现这个功能. 老样子,投篮需要找准角度,变成需要理清思路.对于这个"小而美"的控件,我们思 ...