JAVA网络编程--UDP通信
首先网络传输数据需了解例如以下三点
1、找到对方IP
2、数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识。为了方便称呼这个数字,叫做port,逻辑port
3、 定义通信规则。这个通信规则称为协议。
国际组织定义了通用协议TCP/IP。
127.0.0.1本机回环地址 不易记忆,可用主机名 主机名:localhost
0-65535port范围 0-1024系统使用或保留port 。当中mysql的port号为 3306
一、UDP
UDP相对于TCP来说是不可信任的
TCP在建立连接之前有3次握手,连接建立之后还有数据重传机制来保证数据的稳定传输
而UDP并没有握手机制和重传机制。
简单点说就是UDP通信时仅仅管发,而无论对方收不收的到。
而TCP在每次通信完毕后都要有一个包来确认是否收到。校验是否完善,否则就会重传。
UDP
将数据及源和目的封装成数据包中,不须要建立连接。每一个数据报的限制大小在64内,因无连接。是不可靠协议。
不须要建立连接,速度快。
TCP
建立连接,形成数据传输的通道,在连接中进行大数据量传输,通过三次握手完毕连接。是可靠协议。必须建立连接。效率会稍低。
三次握手,(张三你在吗?)(我在。)(好,我知道你在了。
)
以下是採用UDP发送方式的样例
(一)UDP发送端
需求:通过UDP传输方式,将一段文字数据发送出去。
思路:
1、 建立udpsocket服务
2、 提供数据,并将数据封装到数据包中
3、 通过socket服务的发送功能。将数据包发送出去。
4、 关闭资源。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; public class Work {
public static void main(String[] args) throws IOException {
//创建UDp服务,通过DatagramSocket对象,随机选择数据端口进行发送
DatagramSocket ds=new DatagramSocket();
//确定数据。并封装成数据包
byte[] buf="dadfdadsfsafasdf".getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.100"),1000);
//通过socket服务。将已有的数据包发送出去,通过send方法
ds.send(dp);
//关闭资源
ds.close(); }
}
(二)UDP接收端
定义udp的接收端
需求:
定义一个应用程序。用于接收UDP协议传输的数据并处理。
1、 定义udpSocket服务,一般会监听一个port。
事实上就是给这个接收网络应用程序定义数字标识。方便于明白哪些数据过来应用程序能够处理。
2、 定义一个数据包。由于要存储接收到的字节数据。
由于数据包对象中有很多其它功能能够提前字节数据中的不同数据信息。
3、 通过socket服务的receive方法将收到的数据存入已定义好的数据包中
4、 通过数据包对象的特有功能。将这些不同的数据取出,打印在控制台上。
5、关闭资源
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class ReData {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10000);
byte[] arr = new byte[1024];
DatagramPacket dp = new DatagramPacket(arr, arr.length);
ds.receive(dp);/
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + ":" + data + ":" + port);
ds.close();
}
} DatagramSocket ds = new DatagramSocket(10000);
在while(true)循环运行该语句,就会出现端口已使用异常。
JAVA网络编程--UDP通信的更多相关文章
- Java网络编程UDP通信原理
前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- java 网络编程 UDP TCP
网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...
- java网络编程(UDP详解)
UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...
- Java网络编程——UDP聊天程序
UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...
- JAVA网络编程TCP通信
Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...
- Java网络编程Socket通信
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 UDP (User Datagram Proto ...
- Java网络编程(UDP协议:接收端)
package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...
- Java网络编程(UDP协议:发送端)
package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...
随机推荐
- 《Java虚拟机原理图解》 1.2.3、Class文件里的常量池具体解释(下)
NO9.类中引用到的field字段在常量池中是如何描写叙述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言.我们在定义类的过程中会定义一 ...
- 我的Android进阶之旅------>android Button上面的英文字符串自己主动大写的问题解决
今天碰到一个关于Button的问题:android Button上面的英文字符串会自己主动变成大写,执行的Android 5.1版本号,例如以下图所看到的: 图1:Button 图2:TextView ...
- thinkPHP5 报错session_start(): No session id returned by function解决方法
这是因为用Redis接管了session状态储存,但是Redis又连接不正常导致的 在服务器上查看Redis运行状态一切正常,set.get也没有问题,最后琢磨了半天才发现是PHPRedis扩展没有安 ...
- Makefile经典教程(转)
转自:http://blog.csdn.net/ruglcc/article/details/7814546/ makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这 ...
- Nosql的实际应用场景
怎么样把NoSQL引入到我们的系统架构设计中,需要根据我们系统的业务场景来分析,什么样类型的数据适合存储在NoSQL数据库中,什么样类型的数据必须使用关系数据库存储.明确引入的NoSQL数据库带给系统 ...
- JAVA在线观看视频教程完整版
今天给大家介绍一下JAVA在线观看视频教程完整版,我们知道Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语 ...
- poj 2135 Farm Tour【 最小费用最大流 】
第一道费用流的题目--- 其实---还是不是很懂,只知道沿着最短路找增广路 建图 源点到1连一条容量为2(因为要来回),费用为0的边 n到汇点连一条容量为2,费用为0的边 另外的就是题目中输入的了 另 ...
- Python多线程一学就会!
免费Python课程:阿里云大学——开发者课堂 Python中使用线程有两种方式:函数或者用类来包装线程对象. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.语 ...
- Pyhton学习——Day54
#Django内容回顾# -请求响应HTTP协议(有.无状态)默认传递的是字符串# 传递字符串分为两个部分:1.http1.1 GET /url /index + 请求头# Provisional h ...
- Git的初始化设置
Git安装成功之后,新建一个初始化的仓库以及配置GitHub仓库 Git配置GitHub账户 安装完成之后要进行git的配置,这里配置的是GitHub账户 MisSa@DESKTOP-PIQ06QO ...