JavaSEDemo33 ╰+攻爆jí腚メ 2021-09-25 08:34 207阅读 0赞 ### 文章目录 ### * 简介 * 网络通讯知识点总结 * * 概念 * * TCP协议 * UDP协议 * IP协议 * ICMP协议 * IGMP协议 * ARP协议 * HTTP协议 * FTP协议 * IP = 子网(网络号:前3个字节)+ 主机号(最后一个字节) * TCP和UDP的区别 * HTTP请求方式 * HTTP协议的请求结构 * HTTP协议的响应结构 * 重要的响应状态码 * Socket知识点总结 * * 服务端ServerSocket * 客户端 * NIO * ByteBuffer * Channel接口 * * Channel接口的主要实现类 * Channel接口的特点 * 获取通道的3种方式 * NIO实现文件拷贝 * UDP的服务端开发步骤 * UDP的客户端开发步骤 # 简介 # * 本文是2021/05/06整理的笔记 * 赘述可能有点多,还请各位朋友耐心阅读 * 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进 # 网络通讯知识点总结 # ## 概念 ## ### TCP协议 ### * 全称:Transmission Control Protocol * 传输控制协议 面向连接可靠 字节流传输的传输控制协议 ### UDP协议 ### * 全称:User Datagram Protocol * 用户数据报协议 无连接 不可靠 处理数据报的协议 ### IP协议 ### * Internet Protocol * 网络协议 把数据从源传输到目的地。不保证可靠 顺序 ### ICMP协议 ### * 全称:Internet Control Message Protocol * 网络控制报文协议 主机和路由器之间传递数据 ### IGMP协议 ### * 全称:Internet Group Message Protocol * 网络组报文协议 组播,运行在主机和组播路由器之间 ### ARP协议 ### * 全称:Address Resolution Protocol * 地址解析协议 根据IP地址获取主机的物理地址 ### HTTP协议 ### * 全称:Hyper Text Transfer Protocol * 超文本传输协议 web服务器传输超文本到本地浏览器的协议 ### FTP协议 ### * 全称:File Transfer Protocol * 文本传输协议 在Internet控制文件的双向传输的协议 ## IP = 子网(网络号:前3个字节)+ 主机号(最后一个字节) ## * 例如:192.168.79.主机号 ## TCP和UDP的区别 ## 1. TCP:面向连接 可靠 顺序 字节流模式 2. UDP:不面向连接 不可靠 不保证顺序 数据报模式 ## HTTP请求方式 ## 1. GET:浏览器地址栏输入网址;网页超链接 form表单不写method属性或者method=“get” 服务器返回响应头 响应体 2. POST:form method=“post” 服务器返回响应头 响应体 3. HEAD:服务器只返回响应头 ## HTTP协议的请求结构 ## 大体: 1. 请求行\\r\\n 2. 请求头\\r\\n 3. 空行\\r\\n 4. 请求体 细分: 1. GET请求结构 GET 请求资源url?参数名=参数值&参数名=参数值 HTTP/版本号\\r\\n Accept-Language:zh-cn\\r\\n Host: localhost\\r\\n User-Agent: Mozila/…\\r\\n Acept-Encoding:gzip\\r\\n \\r\\n GET没有请求体 2. POST请求结构 POST 请求资源 url HTTP/版本号\\r\\n Accept-Language:zh-cn\\r\\n Host: localhost\\r\\n User-Agent: Mozila/…\\r\\n Acept-Encoding:gzip\\r\\n Content-Length: 36 \\r\\n 参数名=参数值&参数名=参数值 ## HTTP协议的响应结构 ## 大体: 1. 响应行\\r\\n 2. 响应头\\r\\n 3. 空行\\r\\n 4. 响应体 细分: 状态行 HTTP/1.1 200 OK 响应头 Date: 日期时间 响应发出的时间\\r\\n Content - Type:text/html ;charset = UTF - 8 服务器告诉浏览器自己能响应的对象的类型\\r\\n User - Agent:用户代理说白了就是当前使用的浏览器的类型名称和对应的版本信息\\r\\n content-Length: 300 响应体的字节长度\\r\\n 空行\\r\\n < html > < head > < title > 标题 < /title > < /head > < body > 内容 < /body > < /html > ## 重要的响应状态码 ## 200 OK 一切正常 404 NotFound 请求的资源未找到 500 Server Internal Error服务器内部错误 # Socket知识点总结 # ## 服务端ServerSocket ## 1. 创建 ServerSocket serverSocket = new ServerSocket(8888); 2. 调用accept方法监听客户端发来的请求:Socket socket = serverSocket.accept(); 3. 开管:得到输入和输出流 InputStream in = socket.getInputStream() OutputStream out = socket.getOutputStream(); 4. 使用输入流得到信息,使用输出流向客户端发信息 ## 客户端 ## 1. 创建 Socket socket = new Socket(IP,8888); 2. 开管:得到输入和输出流 InputStream in = socket.getInputStream() OutputStream out = socket.getOutputStream(); 3. 使用输出流发信息(socket.shutdownOutput()输出-1标志),使用输入流得到信息 ## NIO ## 1. 通道:channel 铁轨 2. 缓冲区 buffer 火车 3. 选择器(Selector):是SelectableChannel的多路复用器,用于监控SelectableChannel的IO状况(选择器不能监控FileChannel) ## ByteBuffer ## ByteBuffer抽象类 子类 ByteBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer CharBuffer 常用方法 1. allocate:position 0 limit = capacity 2. put(byte\[\]):position:byte\[\].length limit = capacity 3. 切换到读模式:position:0 limit = 5 capacity=10 4. get(byte\[\] dest) position:5 limit=5 capacity=10 5. rewind()重复读:position回到0 limit:5 capacity:10不变 6. clear():清空缓冲区 position:0 limit=capacity=10 7. mark()标记position的当前位置 8. reset()回到标记的位置 ## Channel接口 ## ### Channel接口的主要实现类 ### 1. FileChannel 2. ServerSocketChannel 3. SocketChannel 4. DatagramChannel 5. Pipe.SinkChannel 6. Pipe.SourceChannel ### Channel接口的特点 ### 1. 双向 2. 异步读写 同步:等待你回来,你不回来,我啥都不干,死等 异步:我做我的事,你打你的饭,互不耽误,商定饭放的位置 3. 通过Buffer读写 ## 获取通道的3种方式 ## 1. Java对支持通道的类提供了getChannel()方法,使用以下的类的getChannel()方法能获取通道 (1)本地IO FileInputStream/FileOutputStream RandomAccessFile (2)网络IO socket ServerSocket DatagramSocket 2. 在JDK1.7中的NIO2针对各个通道类提供了静态方法open() 3. 在JDK1.7中的NIO2的Files工具类的newByteChannel() ## NIO实现文件拷贝 ## 1. 得到输入输出流 2. 得到通道 3. 分配缓冲区 4. 循环读取 1. 读模式 2. 写 3. clear 4. //读取数据实现拷贝 ByteBuffer buffer = ByteBuffer.allocate(1024); while(inputStreamChannel.read(buffer)!=-1)\{ //切换到读模式 buffer.flip(); //将缓冲区中的数据写到输出通道 outputStreamChannel.write(buffer); buffer.clear(); \} 5. inChannel.transferTo() outChannel.transferFrom() 6. close ## UDP的服务端开发步骤 ## 使用DatagramSocket(port)创建DatagramSocket对象,指定端口号,ip是本机,用来接收数据 创建DatagramPakcet对象,包括缓冲区及缓冲区大小:new DatagramPakcet(byte\[ \] buf,int length) 接收数据:DatagramSocket.receive(DatagramPakcet) 得到接收的数据:从哪个ip的端口号发来的什么数据,数据多长 ## UDP的客户端开发步骤 ## 创建DatagramSocket对象,指定端口号(不要跟服务器端口重复),ip是本机,用来发送数据 创建DatagramPacket对象,包括发送数据的缓冲区字节数组,发送数据的长度,目标地址和端口号 发送数据:DatagramSocket.send(DatagramPacket)
相关 JavaSEDemo29IO流 文章目录 简介 练习题 练习1 练习2 练习3 创建文件夹 输入流和输出流 字节流和字符流 r囧r小猫/ 2021年09月25日 08:04/ 0 赞/ 242 阅读
相关 JavaSEDemo23集合 文章目录 简介 树 树删除元素 树的先序 中序 后续遍历 集合 Collection接口 List接口 秒速五厘米/ 2021年09月25日 07:46/ 0 赞/ 204 阅读
相关 JavaSEDemo09 文章目录 简介 练习题目:统计字符串中不同字符的个数 代码示例 程序运行结果 final关键字 final关键字修 谁践踏了优雅/ 2021年09月25日 06:22/ 0 赞/ 224 阅读
相关 JavaSEDemo08 文章目录 简介 Object类的几个方法的使用或重写 equals hashCode finalize 抽象类 野性酷女/ 2021年09月25日 06:22/ 0 赞/ 212 阅读
相关 JavaSEDemo07 文章目录 简介 练习题:(多态)写一个函数,接收一个图形作为参数,打印出该图形的周长和面积 题目分析 代码示例 刺骨的言语ヽ痛彻心扉/ 2021年09月25日 06:18/ 0 赞/ 180 阅读
相关 JavaSEDemo06 文章目录 简介 显示继承与隐式继承 继承的重点 继承与构造方法 继承的优点和缺点 final关键字 多重继承时构造方法的执行情况 清疚/ 2021年09月25日 06:02/ 0 赞/ 213 阅读
相关 JavaSEDemo05 文章目录 简介 void方法中return语句的使用规范 可变API与不可变API 数据交换与方法传参 为什么不能用返回值类型来判断方法是否 比眉伴天荒/ 2021年09月25日 05:58/ 0 赞/ 245 阅读
还没有评论,来说两句吧...