网络编程
一、理解网络的相关概念
**网络的概念:**
计算机网络:多个计算机之间通过专业的设备进行连接,形成一个网络,每一台计算机都是一个网络节点,可以相互进行信息的传递等。
**网络的分类:**
局域网、城域网、广域网、互联网、无线网
**网络通信-IP(Internet Protocol):**
-
在网络中,每台计算机都需要遵守IP协议产生一个唯一的上网标识。
-
IPV4:由4个8位二进制组成。 例:10001101.11100110.10001111.10100011
二进制不好记忆,所以变转换为十进制的,范围是:0~255
IPV6:基本上可以满足全世界的地址需求
- **查看本机的IP地址:**ipconfig
测试网络是否通畅:ping 目标IP地址
DNS域名解析器:Domain Name System,域名系统
它会在系统内准备一份域名和对应机器IP的映射表。
访问一个域名时:
-
查找浏览器内是否有缓存映射
-
查找本机的hosts文件
-
前往网络服务商提供的域名系统
特殊的IP:127.0.0.1 == localhost 本机的回环地址,可以表示本机
网络通信-端口:
-
每个程序运行时都会占用一个端口,它是唯一的。端口范围:0~65535
-
我们如果 想通过某个程序在网路内进行信息交流,必须要知道对方的IP和程序端口号。
**网络服务器:**通常指在网路环境下,具有较高,技术算能力,能够提供用户服务功能的计算机
应用程序的架构:
**B/S:(Browser浏览器 / Server服务器)**浏览器应用程序
基于浏览器为客户端的网络应用程序
典型:网站,小程序...
优点:
1、无需下载安装,只有有浏览器就可以访问。【可以留住很多用户】
2、如果服务器更新,用户几乎无感知。刷新浏览器就可以得到最新的内容
3、因为只需要有浏览器,所以在平台层面的兼容性可以忽略了。
缺点:
1、因为所有的资源都在服务器中,所以在传输信息过程中受到带宽影响比较大
2、在画面渲染和安全验证方法,受限严重。
3、因为资源请求是同步请求,所以用户体验很差【由谷歌地图带起AJAX风,有所改善】
**C/S:(Client客户端 / Server服务器)**客户端应用程序
基于自身定制的客户端的网络应用。
典型:QQ、微信、APP端手游
优点:
1、因为大多数资源都放在了客户端(胖客户端),所以在传输信息只需要加载一些重要信息即可,受到带宽影响较小
2、在画面渲染和安全验证方面,比较强,实现也比较容易。
3、因为信息加载只需要加载必要信息,所以体验较好
缺点:
1、必须安装客户端才能使用。否则无法使用
2、如果服务器更新,必须要重新下载客户端。(省流/补丁更新)
3、不同的平台必须适配不同的版本。
传输协议:
网络通信协议:为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
网络模型中传输层的协议:TCP 和 UDP
TCP:传输控制协议
三次握手,面向连接的传输协议,使用与传输重要的,对安全要求比较高的信息,下载文件,聊天,传输资料
为了维护连接可靠,效率较低
UDP:用户数据报协议
面向无连接的传输协议,适用于传输一些不太重要的信息。视屏聊天,看视频
效率较高
二、使用Socket实现网络应用程序
Socket(中文翻译:插孔,插座)
Socket:(套接字)通过套接字(scoket)向网络发出请求
端口:
物理意义——
逻辑意义——
**※** 通信链路的端点就被称为“套接字”(英文名Socket)
**※** 是提供给应用程序的接口
Socket分类:
**※** 流式套接字(SOCK_STREAM)
面向连接,可靠的数据传输服务 ——> TCP协议
**※** 数据报式套接字(SOCK_DGRAM)
无连接服务 ——> UDP协议
**※** 原始式套接字(SOCK_RAM)
java.net包 |
---|
Socket |
ServerSocket |
DatagramPacket |
DatagramSocket |
InetAddress |
… |
基于TCP协议的Socket编程
※ 基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
※ Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
/**
*使用accept()监听并接收ServerSocket的连接
*/
// 接收客户端请求
// 创建一个Socket对象
ServerSocket serverSocket = new ServerSocket(5000);
// 使用accept()监听并接收ServerSocket的连接
Socket socket = serverSocket.accept();
TCP与UCP的区别:
TCP | UDP | |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
速度 | 慢 | 快 |
基于UDP协议的Socket编程
基于UDP协议的Socket编程步骤: |
---|
利用 DatagramPacket 对象封装数据包 |
利用 DatagramSocket 发送数据包 |
利用 DatagramSocket 接收数据包 |
利用 DatagramPacket 处理数据包 |
DatagramSocket的方法: |
---|
send(); |
receive(); |