Java中的UDP应用
我在《JavaSE项目之聊天室swing版》中通过遵守TCP协议的ServerSocket与Socket实现了聊天室的群聊窗口。同时,在介绍OSI与TCP/IP参考模型时,也曾提及TCP与UDP(全称User Datagram Protocol,用户数据报协议)。
总的来说,TCP与UDP的区别有:
1.TCP与UDP的基本区别:
(1)TCP基于连接,UDP基于无连接;
(2)TCP要求系统资源较多,UDP则较少;
(3)UDP程序结构较简单;
(4)流模式(TCP)与数据报模式(UDP);
(5)TCP保证数据正确性,UDP可能丢包;
(6)TCP保证数据顺序,UDP不保证。
2.UDP应用场景主要有:
(1)面向数据报方式;
(2)网络数据大多为短消息;
(3)拥有大量Client;
(4)对数据安全性无特殊要求;
(5)网络负担非常重,但对响应速度要求高。
3.具体编程时的区别:
(1)套接字Socket的参数不同;
(2)UDP不需要调用listen和accept;
(3)UDP收发数据分别用send()和receive()方法;
(4)TCP:地址信息在connect和accept时确定;
(5)UDP:在send()和receive()方法中每次均需指定地址信息。
我接下来通过代码演示UDP协议。我写了两个类,分别是UDPA和UDPB,通过UDPA给UDPB发送信息。
UDPA.java中的代码如下:
package com.itszt.test; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDPA要给UDPB发信息
*/
public class UDPA {
public static void main(String[] args) throws IOException {
byte[] bs = "我是A,给B发信息".getBytes();//要发的信息内容
//UDPA与UDPB的ip均为本机ip,故设置不同的端口号
InetAddress desIp = InetAddress.getLocalHost();
//数据报包,UDPB的端口为10010
DatagramPacket p = new DatagramPacket(bs, bs.length, desIp, 10010);
//创建数据报套接字,UDPA的端口设置为10086
DatagramSocket socket_A = new DatagramSocket(10086);
//UDPA给UDPB发送数据报
socket_A.send(p);
//关闭socket_A套接字
socket_A.close();
}
}
UDPB.java中的代码如下:
package com.itszt.test; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDPB接收来自UDPA的信息
*/
public class UDPB {
public static void main(String[] args) throws IOException {
//用数组接收数据报包
byte[] bs = new byte[500];
DatagramPacket p = new DatagramPacket(bs, bs.length);
//创建数据报套接字
DatagramSocket socket_B = new DatagramSocket(10010);
//接收数据报包
socket_B.receive(p);
System.out.println(new String(bs, 0, p.getLength()));
//关闭套接字
socket_B.close();
}
}
在程序运行时,先运行UDPB,等着接收UDPA发来的信息,然后再运行UDPA,则UDPB接收到UDPA的信息如下:
我是A,给B发信息
Java中的UDP应用的更多相关文章
- Java中的UDP协议编程
一. UDP协议定义 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包 ...
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
1.什么是UDP协议? UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层. ...
- java中的UDP总结
先说一下关于InetAddress类,用一个小例子: import java.net.InetAddress; import java.net.UnknownHostException; public ...
- Java中使用UDP实现简单的聊天功能
通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: import java.io.IOException; import java.net.*; im ...
- Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)
1.基本概念介绍: 首先得简单介绍下UDP. UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层, ...
- JAVA中UDP使用
UDP协议 在有些应用程序中,保持最快的速度比保证每一位数据都正确到达更重要.例如,在实时音频或视频中,丢失数据包只会作为干扰出现.干扰是可以容忍的,但当TCP请求重传或等待数据包到达而它却迟迟不到时 ...
- Java中的TCP/UDP网络通信编程
127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- HTTP协议报文、工作原理及Java中的HTTP通信技术详解
一.web及网络基础 1.HTTP的历史 1.1.HTTP的概念: HTTP(Hyper Text Transfer Protocol ...
随机推荐
- Java日志框架那些事儿
文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...
- css实现六边形图片(最简单易懂方法实现高逼格图片展示)
不说别的,先上效果: 用简单的div配合伪元素,即可‘画出’这幅六边形图片,原理是三个相同宽高的div,通过定位旋转拼合成一个六边形,再利用背景图层叠,形成视觉上的一张整图.下面咱们一步一步来实现. ...
- JAVAFX-3 开发应用
理解布局 布局容器(Layoutcontainer)或面板(Pane)允许对JavaFX应用程序场景图中的UI控件进行灵活.动态的排布.JavaFX Layout API包括下列容器类: ● Bord ...
- 4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
跟踪标记:610 功能: 用批量导入操作(Bulk Import Operations)加载数据时,对于索引组织表(即有聚集索引的表) 最小化日志: 上图为simple/bulk-logged恢复模式 ...
- 杭电ACM——自我强化步骤
第一阶段:开始入门吧!(15天,53题) http://blog.csdn.net/always2015/article/details/44966019#t0 一.输入输出练习(2天,10题) 10 ...
- selenium与表格的二三事
今天遇到的问题是selenium与表格中行和列的问题! 我想要做的事情是统计当前的table有多少行,表格形式如下如所示: 图中所示为2行,我的定位方式是这样的 : table=driver.find ...
- jQuery常用事件及扩展
jquery中的常用事件 blur([[data],fn]) --失去焦点触发(鼠标)focus([[data],fn]) --得到焦点触发(鼠标)change([[data],fn]) - ...
- 读懂源码:一步一步实现一个 Vue
源码阅读:究竟怎样才算是读懂了? 市面上有很多源码分析的文章,就我看到的而言,基本的套路就是梳理流程,讲一讲每个模块的功能,整篇文章有一大半都是直接挂源码.我不禁怀疑,作者真的看懂了吗?为什么我看完后 ...
- 如果Centos没有桌面,怎么修改IP地址
修改前备份!!! 修改前备份!!! 修改前备份!!! [PHP] 纯文本查看 复制代码 ? 1 vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑,输入以下 ...
- springMVC(1)---获取前段数据
springMVC(1)---获取前段数据 首先说明,如果你学过Struts2,那么在学springMVC就会简单很多,我也不最基础的开始写了,我前篇文章搭建了个ssm框架,算是springmvc入门 ...