前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记-全栈-Java基础-11-网络编程

Java学习笔记-全栈-Java基础-11-网络编程

作者头像
devi
发布2021-08-18 15:22:07
2660
发布2021-08-18 15:22:07
举报
文章被收录于专栏:搬砖记录

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()
    • 5.释放资源
  • 发送端
    • 1.使用DatagramSocket 指定端口 创建发送端
    • 2.准备数据 转成字节数组
    • 3.将字节数组封装成DatagramPacket包裹
      • a)指定目的地 InetSocketAddress(address,端口)
    • 4.发送包裹 send(DatagramPacket p)
    • 5.释放资源 close

2.3 数据封装与解封

在这里插入图片描述
在这里插入图片描述

2.4 端口相关的cmd命令

  • 查看所有端口情况:netstat -ano
  • 查看指定端口:netstat -ano|findstr ”8080”
  • 查看指定进程:tasklist|findstr “8080”
  • 查看具体程序:任务管理器查看PID

2.5. 将任意类型数据转为字节数组

网络上的大多数据都需要通过字节数组传输,需熟练掌握任意类型转为字节数组的办法。

  • String类型用String.getBytes()即可
  • 由于java中的任意数据都可以转为Object,因此可以使用Object输入输出流实现转换。
代码语言:javascript
复制
//将数据写入字节数组流
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);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 基本概念
    • IP、端口、URL
      • 分层网络协议
        • 传输层:TCP(transfer control protocol)
          • 传输层:UDP(User DatagramProtocol)
            • 应用层:HTTP协议
              • 传输层与应用层的连接:Socket(套接字)
              • 2. Socket编程
                • 2.1 基于TCP
                  • 2.2 基于UDP
                    • 2.3 数据封装与解封
                      • 2.4 端口相关的cmd命令
                        • 2.5. 将任意类型数据转为字节数组
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档