博客
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协议相关推荐

  1. 网络编程: 基于UDP协议的socket

    udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socketsk = socket. ...

  2. step5 . day4 网络编程 基于UDP协议的网络编程流程及API

    UDP协议是面向无连接,不可靠的传输协议,编程流程如下; 服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. ...

  3. 基于ZYNQ-7000的AI加速器设计之PS端(ARM)网络编程(UDP协议)

    1.开始前的准备工作 关闭电脑防火墙 连接开发板电源 开发板与PC之间串口连接,JTAG下载线连接 PC机与开发板间网线连接,并保证能ping通 2.Vivado端配置 创建工程,具体步骤不详细介绍, ...

  4. 网络编程---tcp/udp协议

    协议使用场景: udp协议(User Datagram Protocol) 即时通讯类的软件 :qq 微信 飞信 歪歪 tcp协议(Transmission Control Protocol) 发邮件 ...

  5. Java网络编程——基于UDP协议的聊天室

    UDP简述    UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议.它为应用程序提供了一种无需建立连接就可以发送封 ...

  6. step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能

    模拟在线群聊功能,使用多进程完成聊天内容的接受和服务器端的转发,demo代码记录参考 //client_chat_UDP code #include <stdio.h> #include ...

  7. 网络编程及三大协议(TCP + UDP + Http)

    网络编程及三大协议(TCP + UDP + Http) 一.网络编程 1.计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络 ...

  8. Python网络编程(Socket)

    Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...

  9. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  10. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

最新文章

  1. 2018深度学习引用数最高的十大论文
  2. 电脑有回声_专递课堂互动教室现场有回声怎么办?
  3. C++ 11 笔记 (四) : std::bind
  4. 数据同步云端本地_如何从云端删除Windows 8的同步数据
  5. 传统到敏捷的转型中,谁更适合做Scrum Master?
  6. wmware下linux安装vmware tools步骤
  7. ArrayList源码解读(jdk1.8)
  8. ajax zlib,jQuery递增地读取Ajax流吗?
  9. multisim10.0安装教程
  10. 这几种方法帮你快速实现回到页面顶部
  11. linux 中两个文档怎么对比内容是否一致
  12. Sentinel-1 GRD数据处理及其在水体信息提取中的应用
  13. 学习笔记-支付宝支付
  14. [LINUX服務器搭建套餐]2.安裝mysql
  15. gif在线转换html,在线mp4转换gif
  16. Git本地版本回退与远端版本回退(回滚)
  17. 什么是布隆过滤器?如何使用?
  18. QQ浏览器隐私泄露报告
  19. Direct3D 12——纹理——三角形插值:重心坐标
  20. 给Java程序员的一些中肯建议,你还在虚度光阴吗?(文末福利)

热门文章

  1. jmeter压力测试过程中遇到过的问题及解决方法(包括jmeter和服务程序)
  2. 支付宝商家 支付接入流程
  3. 中兴V5怎么打开usb调试模式
  4. 微信客服发送菜单消息,用超链接文本代替菜单按钮
  5. 中国互联网经历过哪些大事件?
  6. 随手记录,idea无法创建class,文件夹没有小圆点
  7. 使用组策略配置Windows防火墙设置和规则
  8. MIT6.824 Primary-Backup Replication论文导读
  9. 华北计算机系统工程研究所录取名单,2019年华北计算机系统工程研究所考研调剂信息公布内容...
  10. 计算机网络术语 基本概念