day21Java-网络编程Socket-UDP协议
博客 |
---|
Java-(高级) |
文章目录
- UDP协议
- UDP协议链式编程
- UDP协议键盘录入
- UDP协议键盘录入多线程实现
UDP协议
java.net.DatagramSocket:此类表示用来发送和接收数据报包的套接字。 (里面有数据包那就是UDP协议)
UDP:把数据打包数据有限制不建立连接速度快不可靠
UDP协议发送和接收数据图解
UDP编程演示
UDP协议发送数据:
A:创建发送端Socket对象
B:创建数据,并把数据打包
C:调用Socket对象的发送方法发送数据包
D:释放资源
public class DataGramSocketSendDemo {public static void main(String[] args) throws IOException {//1.创建udp发送端Socket对象//DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。DatagramSocket ds = new DatagramSocket();//2.创建数据并打包//不知道怎么创建数据并包,就先放着。先看后面//DatagramPacket(byte[] buf, int length, InetAddress address, int port):构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。//将发送的数据转换为字节数组byte[] bys = "格雷福斯我要打野".getBytes();//获取字节数组的长度int len = bys.length;//指定发个那个ip,指定发送到哪个ip。InetAddress address = InetAddress.getByName("192.168.150.1");//定义端口int port = 10000;DatagramPacket dg = new DatagramPacket(bys, len, address, port);//3.使用Socket对象调用方法发送数据//但是我也不知道,怎么发送?那就去看该对象的方法。// void send(DatagramPacket p):从此套接字发送数据报包。//通过该方法的参数,知道了需要DatagramPacket的对象,参数里面介绍还需要一个四个参数的构造方法。ds.send(dg);//4.释放资源ds.close();}
}
UDP协议接收数据:
A:创建接收端Socket对象
B:创建一个数据包(接收容器)
C:调用Socket对象的接收方法接收数据
D:解析数据包,并显示在控制台
E:释放资源
public class DatagramSocketReceiveDemo {public static void main(String[] args) throws IOException {//1.创建接udp收端Socket对象//1.DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket ds = new DatagramSocket(10000);//2.创建一个容器用于接收数据包//创建一个字节数组,因为我知道数据有多大//DatagramPacket(byte[] buf, int length):构造 DatagramPacket,用来接收长度为 length 的数据包。byte[] bys = new byte[1024];int len = bys.length;DatagramPacket dg = new DatagramPacket(bys,len);//3.调用Socket对象方法接收数据// void receive(DatagramPacket p):从此套接字接收数据报包。ds.receive(dg);//阻塞式方法 数据来了才读。//4.解析数据包,并显示在控制台// InetAddress getAddress():返回某台机器的 IP 地址InetAddress address = dg.getAddress();String ip = address.getHostAddress();//获取数据//void setData(byte[] buf):为此包设置数据缓冲区。 byte[] datas = dg.getData();//int getLength():返回将要发送或接收到的数据实际的长度。int lens = dg.getLength();String s = new String(datas,0,lens);System.out.println(ip + "传递的数据是:" + s);//5.释放资源ds.close();}
}
结果:
192.168.150.1传递的数据是:格雷福斯我要打野
UDP协议链式编程
UDP协议发送数据:
A:创建发送端Socket对象
B:创建数据,并把数据打包
C:调用Socket对象的发送方法发送数据包
D:释放资源
public class DatagramSocketSendDemo {public static void main(String[] args) throws IOException {//1.创建udp发送端Socket对象DatagramSocket ds = new DatagramSocket();//2.创建数据包byte[] bytes = "格雷福斯我要打野".getBytes();DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("192.168.150.1"),10000);//3.使用Socket对象,发送数据。ds.send(dp);//4.释放资源ds.close();}
}
UDP协议接收数据:
A:创建接收端Socket对象
B:创建一个数据包(接收容器)
C:调用Socket对象的接收方法接收数据
D:解析数据包,并显示在控制台
E:释放资源
public class DatagramSocketReciveDemo {public static void main(String[] args) throws IOException {//1.创建udp接收端Socket对象DatagramSocket sd = new DatagramSocket(10000);//2.创建数据包byte[] bytes= new byte[1024];DatagramPacket dp =new DatagramPacket(bytes,bytes.length);//3.接收数据sd.receive(dp);//4.解析数据System.out.println(new String(dp.getData(),0,dp.getLength()));//5.关闭资源sd.close();}
}
UDP协议键盘录入
数据来自于键盘录入
键盘录入数据要自己控制录入结束。(输入886结束)
UDP协议发送数据:
A:创建发送端Socket对象
B:创建数据,并把数据打包
C:调用Socket对象的发送方法发送数据包
D:释放资源
代码演示
public class DatagramSoketSendDemo {public static void main(String[] args) throws IOException {//创建发送端Socket对象DatagramSocket ds = new DatagramSocket();//创建字符输出流对象(模拟键盘录入)BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while (true) {String line = null;if ((line = br.readLine()) != null) {//这里是有个问题的,如果这里的死循环,没有break。ds.close()就会报错,// 如果没有终止,就不会走释放资源。if (line.equals("886")) {break;}byte[] bytes = line.getBytes();//创建数据包,封装数据DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.150.1"), 10001);//发送数据ds.send(dp);}}//释放资源ds.close();}
}
UDP协议接收数据:
A:创建接收端Socket对象
B:创建一个数据包(接收容器)
C:调用Socket对象的接收方法接收数据
D:解析数据包,并显示在控制台
E:释放资源
public class DatagramSocketReciveDemo {public static void main(String[] args) throws IOException {//1.创建接收端Socket对象DatagramSocket ds = new DatagramSocket(10001);while (true) {//2.创建数据包裹byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//3.接收数据ds.receive(dp);//4.分析数据System.out.println(new String(dp.getData(), 0, dp.getLength()));}//5.释放资源//ds.close();}
}
结果:接受端
我想用男枪打野?
但是我的盲僧玩的更好怎么办?
我也可以玩亚索!
UDP协议键盘录入多线程实现
代码演示
多线程测试
public class ChatRoom {public static void main(String[] args) {//创建线程对象SendThread st= new SendThread();ReciveThread rt= new ReciveThread();//启动线程st.start();rt.start();}
}
UDP协议发送数据:
A:创建发送端Socket对象
B:创建数据,并把数据打包
C:调用Socket对象的发送方法发送数据包
D:释放资源
public class SendThread extends Thread {@Overridepublic void run() {DatagramSocket ds = null;try {//1.创建发送端Socket对昂ds = new DatagramSocket();//创建字节输入流对象(模拟键盘录入)BufferedReader br =new BufferedReader(new InputStreamReader(System.in));String line = null;while (true){if((line=br.readLine())!=null){if("886".equals(line)){break;}byte[] bytes = line.getBytes();//2.创建数据包,并封装数据DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("192.168.150.1"),10002);//3.发送数据ds.send(dp);}}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {//4.关闭资源ds.close();}}
}
UDP协议接收数据:
A:创建接收端Socket对象
B:创建一个数据包(接收容器)
C:调用Socket对象的接收方法接收数据
D:解析数据包,并显示在控制台
E:释放资源
public class ReciveThread extends Thread {@Overridepublic void run() {//1.创建接收端Socket对象try {DatagramSocket ds = new DatagramSocket(10002);while (true) {//2.创建数据包裹byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);//3.接收数据ds.receive(dp);//4.分析数据byte[] data = dp.getData();//返回实际长度int len = dp.getLength();System.out.println(new String(data, 0, len));}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
结果:
天降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,揉食指然也。
天降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,揉食指然也。
岳云鹏,郭德纲。
岳云鹏,郭德纲。
我想用格雷福斯打野
我想用格雷福斯打野
day21Java-网络编程Socket-UDP协议相关推荐
- 网络编程: 基于UDP协议的socket
udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socketsk = socket. ...
- step5 . day4 网络编程 基于UDP协议的网络编程流程及API
UDP协议是面向无连接,不可靠的传输协议,编程流程如下; 服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. ...
- 基于ZYNQ-7000的AI加速器设计之PS端(ARM)网络编程(UDP协议)
1.开始前的准备工作 关闭电脑防火墙 连接开发板电源 开发板与PC之间串口连接,JTAG下载线连接 PC机与开发板间网线连接,并保证能ping通 2.Vivado端配置 创建工程,具体步骤不详细介绍, ...
- 网络编程---tcp/udp协议
协议使用场景: udp协议(User Datagram Protocol) 即时通讯类的软件 :qq 微信 飞信 歪歪 tcp协议(Transmission Control Protocol) 发邮件 ...
- Java网络编程——基于UDP协议的聊天室
UDP简述 UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议.它为应用程序提供了一种无需建立连接就可以发送封 ...
- step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能
模拟在线群聊功能,使用多进程完成聊天内容的接受和服务器端的转发,demo代码记录参考 //client_chat_UDP code #include <stdio.h> #include ...
- 网络编程及三大协议(TCP + UDP + Http)
网络编程及三大协议(TCP + UDP + Http) 一.网络编程 1.计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络 ...
- Python网络编程(Socket)
Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- 【Linux网络编程】UDP 套接字编程
[Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...
最新文章
- 2018深度学习引用数最高的十大论文
- 电脑有回声_专递课堂互动教室现场有回声怎么办?
- C++ 11 笔记 (四) : std::bind
- 数据同步云端本地_如何从云端删除Windows 8的同步数据
- 传统到敏捷的转型中,谁更适合做Scrum Master?
- wmware下linux安装vmware tools步骤
- ArrayList源码解读(jdk1.8)
- ajax zlib,jQuery递增地读取Ajax流吗?
- multisim10.0安装教程
- 这几种方法帮你快速实现回到页面顶部
- linux 中两个文档怎么对比内容是否一致
- Sentinel-1 GRD数据处理及其在水体信息提取中的应用
- 学习笔记-支付宝支付
- [LINUX服務器搭建套餐]2.安裝mysql
- gif在线转换html,在线mp4转换gif
- Git本地版本回退与远端版本回退(回滚)
- 什么是布隆过滤器?如何使用?
- QQ浏览器隐私泄露报告
- Direct3D 12——纹理——三角形插值:重心坐标
- 给Java程序员的一些中肯建议,你还在虚度光阴吗?(文末福利)