Java学习笔记-全栈-Java基础-11-网络编程
2020-01-13 21:14
281 查看
网络编程
- 1. 基本概念
- IP、端口、URL
- 分层网络协议
- 传输层:TCP(transfer control protocol)
- 传输层:UDP(User DatagramProtocol)
- 应用层:HTTP协议
- 传输层与应用层的连接:Socket(套接字)
1. 基本概念
IP、端口、URL
IP --> 节点(电脑等设备)
端口 --> 软件
URL --> 资源
URL与URI的区别和关系:
URL相当于绝对路径,URI相当于相对路径。
URL: https://www.test.com/md/page3/img.png
URI: md/page3/img.png
分层网络协议
ISO是通用参考模型,实际使用的层数往往更简单的,如TCP/IP。
传输层:TCP(transfer control protocol)
- 面像连接的、可靠的、点到点的通信、占用系统资源多、效率低、基于字节流的传输层通信协议。
- 三次握手:拨号,确定收到,开始传输
传输层:UDP(User DatagramProtocol)
- 无连接的、传输不可靠(可能丢包)、发送不管对方是否准备好、接收方收到也不确认、可以广播发送、简单、开销小。
应用层:HTTP协议
- 应用层的协议,基于TCP的WWW标准协议
传输层与应用层的连接:Socket(套接字)
2. Socket编程
2.1 基于TCP
通信双方需要建立连接,连接建立时存在主次之分,先有服务端,再有客户端,之后没有主次之分
2.2 基于UDP
UDP所需元素:
-
端口:仅用于receive(packer)和send(packer)
-
数据:必须是字符数组
-
容器:仅用于打包数据以及挂载目标地址DatagramPacket(datas,datas.length,new InetSocketAddress(ip,port));
-
send(client):发送端口,目标端口,发送数据以及发送容器
-
receive(server):接收端口,接收容器
UDP特点:
- 1.通信双方不需要建立连接,通信双方完全平等(如QQ聊天)
- 2.一次数据包60k左右,不能太大
- 3.不需要IO流实现传输,只需要字节数组
- 4.使用的类: a)DatagramSocket:仅仅用于发送或接收数据包的套接字
- b)DatagramPacket:数据包,包含传送的地址
UDP实现流程
-
接收端:
1.使用DatagramSocket 指定端口 创建接收端 - 2.准备容器 byte[] container = new byte[1024*60] 封装成DatagramPacket包裹
- 3.阻塞式接收包裹 receive(DatagramPacket p)
- 4.分析数据 a)Byte[] getDate()
- b)getLength()
发送端
-
1.使用DatagramSocket 指定端口 创建发送端
2.3 数据封装与解封
2.4 端口相关的cmd命令
- 查看所有端口情况:netstat -ano
- 查看指定端口:netstat -ano|findstr ”8080”
- 查看指定进程:tasklist|findstr “8080”
- 查看具体程序:任务管理器查看PID
2.5. 将任意类型数据转为字节数组
网络上的大多数据都需要通过字节数组传输,需熟练掌握任意类型转为字节数组的办法。
-
String类型用String.getBytes()即可
-
由于java中的任意数据都可以转为Object,因此可以使用Object输入输出流实现转换。
//将数据写入字节数组流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(baos)); oos.write(10); oos.flush(); //将字节数组流转为字节数组 byte[] datas = baos.toByteArray(); //将字节数组输出 ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas))); int revices= ois.read(); System.out.println(revices);
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 网络编程3--毕向东java基础教程视频学习笔记
- Java学习笔记之网络编程基础-通过URL获取网络图片
- 黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】
- java基础之网络编程(学习笔记)
- Java 网络编程 学习笔记一 基础知识
- Java学习笔记之网络编程基础-通过URL获取HTML页面
- Java基础学习笔记之网络编程
- 网络编程3--毕向东java基础教程视频学习笔记
- Java学习笔记之网络编程基础-通过URLConnection获取HTML页面
- 网络编程2--毕向东java基础教程视频学习笔记
- 黑马程序员_JAVA网络编程基础概念+URL类学习笔记
- 黑马程序员—21—java基础:有关网络编程的学习笔记和学习心得体会
- Java学习笔记之网络编程基础-获取本机名称
- java 从零开始,学习笔记之基础入门<网络编程_带QQ模拟功能>(二十)
- Java学习笔记(七、网络编程基础)
- 网络编程4--毕向东java基础教程视频学习笔记
- Java基础学习笔记二十二 网络编程
- 网络编程2--毕向东java基础教程视频学习笔记
- 网络编程1--毕向东java基础教程视频学习笔记
- Java学习笔记-全栈-Java基础-12-Java动态编程