网络编程
- 计算机网络
- 网络编程
实现多台计算机之间实现数据的共享和传递,网络应用程序主要组成为:
网络编程+IO流+多线程
- 网络模型
两台计算机之间的通信是根据什么规则来走的(OSI & TCP/IP)
此处简单了解该模型就行《TCP/IP详解》《TCP协议簇》
- 网络编程三要素
网络通讯的模型:请求-响应,客户端-服务端
三要素:IP地址,端口,协议(数据传输的规则)
-
- IP地址
IP地址:网络中计算机的唯一标识(IP地址是一个32位的二进制数据,为了方便,将一个字节的二进制转换为一个十进制的数据)
IP地址的组成:网络号段+主机段
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
----可以配置256*256*256台主机
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
补充:
A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络屏蔽为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。 B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络屏蔽为:255.255.0.0; C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络屏蔽为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。 |
特殊地址:
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
DOS命令 ipconfig:查看本机IP地址
xxx.xxx.xxx.255 广播地址
访问百度(IP和域名--DNS服务器)
一个IP可以对应多个域名,但是一个域名在一个时刻只能对应一个IP
-
- 端口号
正在运行的程序的标识
- A:每个网络程序都会至少有一个逻辑端口
- B:用于标识进程的逻辑地址,不同进程的标识不同
- C:有效端口:0~65535,其中0~1024系统使用或保留端口。
- 80
- ftp:23
- www.baidu.com:80
- 通过第三方工具可以查看
注意:端口与协议有关:TCP和UDP的端口互不相干,同一个协议的端口不能重复,不同协议的可以重复
TCP:10086
UDP:10086
-
- 协议
通信规则,就是数据的传输规则
TCP、UDP都是传输层的协议
TCP
建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低,例如:打电话
UDP
将数据源和目的封装到数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快:例如发短信
看看如何采用API来进行网络编程?IP 端口 协议
- InetAddress类
用来表示主机的信息
getByName public static InetAddress getByName(String host) throws UnknownHostException 在给定主机名的情况下确定主机的 IP 地址。 主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式。如果提供字面值 IP 地址,则仅检查地址格式的有效性。 getLocalHost public static InetAddress getLocalHost() throws UnknownHostException 返回本地主机。 |
练习:
1,分别采用localhost(域名)和ip地址作为参数,获取InetAddress对象,并打印该对象信息,观察其输出的结果是否有差别? 2,掌握getLocalHost方法的作用 |
C:\Windows\system32\drivers\etc\ hosts
一个主机可以放多个个人网站
www.baidu.com/14.215.177.37
www.baidu.com/14.215.177.38
www.taobao.com/183.61.241.252
www.taobao.com/121.14.89.253
- Socket
Scoket也叫套接字,其表示的是IP地址和端口号的组合。 网络编程主要就是指Socket编程,网络间的通信其实就是Socket间的通信,数据就通过IO流在两个Scoket间进行传递。 Socket |
- TCP编程
API:Socket,ServerSocket
客户端(发送一个请求) 服务端(接收到这个请求,给予响应)
案例驱动学习:
-
- 简单的TCP通信
- 编写服务端程序
- 编写客户端程序
- 客户端向服务端发送请求信息,服务端成功接收
- 服务端向客户端发送响应信息,客户端成功接收
- 升级服务端,使其处理多个客户端请求
- 继续优化服务端,让多个客户端的请求无需排队
- 关闭资源-提取工具类
- 简单的TCP通信
- TCP案例
任务:
- 基本操作
- 传递文件
- 一对一聊天
- 优化一对一聊天
- TCP三次握手 和 四次挥手
- UDP编程
- 简介
UDP(User Datagram Protocol)用户数据报包协议,UDP和TCP位于同一层-传输层,但它对于数据包的顺序错误或重发没有TCP可靠;UDP是一种面向无连接的通信协议。UDP向应用程序提供一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,不保证可靠数据的传输
UDP --- 发短信
TCP --- 打电话
案例:
-
- 简单的UDP通信
- 可以一对一随便聊,而且读写分离
2.TCP VS UDP (学习后自行比对)
TCP UDP
是否连接 面向连接 无面向连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度 慢 快
- 所需学习类
DatagramPacket ---此类表示数据报包
DatagramSocket ---此类用来发送和接受数据报包的套接字
SocketAddress getLocalSocketAddress() 返回此套接字绑定的端点的地 址,如果尚未绑定则返回 null。
Void send(DatagramPacket p) 从此套接字发送数据报包。
Void receive(DatagramPacket p) 从此套接字接收数据报包。
SocketAddress ---抽象类,IP+端口号