网络编程

网络概述

概述

互联网时代,网络带给我们:

  • 聊天
  • 传输/共享资料
  • 打游戏
  • 共享屏幕
  • ...

计算机网络是指将 地理位置不同 的具有独立功能的 多台计算机 及其外部设备,通过通信线路连接起来 ,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

每一台连接到网络中设备,被称之为 “节点”。

 扩展知识:

网络(Internet),它的前身是美国国防部高级研究计划局(ARPA)用于军事目的的通信网络。

20世纪60年代末,正处于冷战时期。当时美国军方为了自己的计算机网络在受到袭击时,即使部分网络被摧毁,其余部分仍能保持通信联系,便由美国国防部的高级研究计划局(ARPA)建设了一个军用网,叫做“阿帕网”(ARPAnet)。

阿帕网于1969年正式启用,当时仅连接了4台计算机,供科学家们进行计算机联网实验用。这就是因特网的前身。到70年代。ARPAnet经过独断发展,又设立了新的研究项目,最终形成“互联网”。研究人员将之简称“Internet”。这个名词就一直沿用到现在。

分类

按照网络覆盖范围进行分类:

  • 局域网:覆盖范围相对较小,常见有:家庭局域网、学校局域网、公司局域网..
    • 速度、安全...
  • 城域网
  • 广域网(互联网)

按照是否有线进行分类:

  • 无线网
  • 有线网

IP

IP:Internet Protocol,在计算机连接到网络之后,会随机分配一个唯一的 “身份证”/"地址"。有了 IP,两台计算机可以通过网络进行通信,一般情况下,IP 都是动态的,还有一些情况下,IP 是静态的(公网 IP)。

IP 地址版本:

  • IPv4:由 4 个 8 位的二进制数来表示,如:00001010.00000000.00000000.00000001 ,由于二进制形式表示的 IP 地址非常不便记忆和处理,因此通常会将 IP 地址写成十进制的形式。11111111.11111111.11111111.11111111                                                                                         255.255.255.255                                                                                                                         单个位的范围是:0 ~ 255
  • IPv6                                                                                                                                       IPv6 使用 16 个字节表示 IP 地址,它所拥有的地址容量约是 IPv4 的 8 X 1028 倍。

查看本机 ip 命令:

  • Windows系统:在命令行中,输入 ipconfig

测试本机和其他计算机的联通命令:

  • ping命令,在命令行中,输入 ping IP地址/域名

在同一个网络不允许出现两个相同的 “身份证”,如果真的出现了,其中一个必然无法加入到网络。

域名

因为 IP 地址,记忆也比较繁琐,所以一般为了方便记忆一些程序所在计算机的地址,都是会将 IP 和 域名绑定,这样我们通过访问域名就可以获得对方的 IP。

通过 DNS 来解析域名(由网络运营商提供)。

目前,国内,IP 和 域名绑定后,还需要进行备案,否则后续运营商不会给你解析域名。

端口

每个程序在计算机中运行时,都需要占用一个端口。

端口号的取值范围是 0~65535,其中, 0~1023 之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用 1024 以上的端口号,从而避免端口号被另外一个应用或服务所占用。

常用的端口:

  • HTTP协议默认端口:80
  • HTTPS协议默认端口:443
  • SSH协议默认端口:22
  • MySQL数据库默认端口:3306
  • Tomcat服务器默认端口:8080
  • Nginx服务器默认端口:80
  • ....

经常出现 “端口占用” 错误。

在浏览器中,输入了一个域名,然后回车之后,到显示页面,发生了什么?

1 . 你输入了 www.baidu.com ,浏览器会将这个地址补完整:百度一下,你就知道

2 . 浏览器根据域名来查找 IP 地址

  • 浏览器缓存    
  • 系统缓存
  • 路由器缓存
  • 本地 DNS 设置:hosts文件
  • 网络运营商提供的 DNS 服务器

3 . 浏览器结合 IP 地址和端口定位到指定机器的指定程序

4 . 程序处理完请求后,会将结果响应回来

5 . 浏览器接收响应结果,处理并展示

C/S架构和B/S架构

C/S:Client,客户端 / Server,服务器

  • QQ、迅雷、抖音 ...
  • 需要下载安装才能使用,如果更新还需要重新下载(优化方式:省流更新技术)
  • 有效减轻服务器的压力(胖客户端),带来更好的用户体验,受到网络影响较小
  • 客户端对于计算机要求较高,画面渲染比较强
  • 安全性较高

B/S:Browser,浏览器(客户端) / Server,服务器(1990年左右,诞生)

  • 京东、百度、各种小程序 ...
  • 不需要下载安装,只需要一个浏览器即可使用,如果更新刷新一下即可
  • 服务器压力较大(瘦客户端),受到网络影响较大(优化方式:异步请求技术等)
  • 客户端对于计算机要求较低,画面渲染比较差
  • 安全性较差

Socket概述

socket技术(套接字编程),底层机制复杂,所以 Java 在 java.net 包下提供了一套 API,用于简化 Socket 编程。

  • Socket
  • ServerSocket
  • DatagramPacket
  • DatagramSocket
  • InetAddress
  • ...

传输协议

为了在网络中不同的计算机之间进行通信而建立的规则,标准或约定的集合。

  • TCP协议(Transmission Control Protocol,传输控制协议)
    • 面向连接的、可靠的 、基于字节流的传输通信协议
    • 文件传输、聊天 ...
    • 三次握手建立连接、四次挥手断开连接
  • UDP协议(User Datagram Protocol,用户数据报协议)
    • 无连接的 协议,不可靠 ,在传输数据之前,客户端和服务器并不建立和维护连接
    • 视频聊天、远程会议 ...

基于TCP协议开发网络程序

Socket:用于开发客户端程序

构造方法:

  • Socket(String host, int port) 指定服务端程序的主机地址(IP)和端口来构建 Socket 程序

常用方法:

  • getOutputStream() : OutputStream 获取输出流,输出数据
  • getInputStream() : InputStream 获取输入流,读取数据
  • getInetAddress() : InetAddress 获取连接的 IP 地址
  • close() : void 关闭资源

ServerSocket:用于开发服务端程序

构造方法:

  • ServerSocket(int port) 指定服务端程序的端口

常用方法:

  • accept() : Socket 监听客户端请求,将客户端请求封装到 Socket 对象中
  • close() : void 关闭资源

基于UDP协议开发网络程序

DatagramPacket:封装数据

构造方法:

  • DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    • p1:字节数据数组
    • p2:字节数据长度
    • p3:接收方IP地址
    • p4:接收方端口
  • DatagramPacket(byte buf[], int length) 接收方数据包

常用方法:

  • getData() : byte[] 获取封装的数据
  • getLength() : int 获取封装数据的长度

DatagramSocket:传输数据

构造方法:

  • DatagramSocket(int port) 指定运行端口
  • DatagramSocket() 发送方可用

常用方法:

  • send(DatagramPacket p) : void 发送封装好的数据包
  • receive(DatagramPacket p) : void 接收数据到数据包
  • close() : void 关闭资源

InetAddress:

  • getByName(String host) : InetAddress 根据主机地址获取 InetAddress 对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值