面向网络编程
计算机网络
把分布在不同地方的计算机通过通信设备连接起来,通过软件实现资源共享。
网络编程
Java语言支持网络,Java语言把网络实现细节封装成不同的类,使用这些类,开发的程序,就可以实现网络间数据传输。
ServerSocket 服务器端
Socket 客户端
网络编程的核心要素
-
如何精准的找到网络中的某台主机(通过IP+端口号)
-
找到后如何可靠高效的进行高效的传输(网络传输协议,TCP,UDP)
OSI七层模型
应用层/表示层/会话层/运输层/网络层/链路层/物理层
TCP/IP模型
网络接口层/网际层/运输层/应用层
TCP
三次握手,建立连接
标志位(Flags):共6个,即URG、ACK、PSH、 RST、SYN、FIN,
具体含义如下: URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。
四次挥手,释放连接
实现网络编程
Scoket类 套接字:包含服务器IP+端口
常用方法
.close() 关闭Socket
.getInputStream 与Socket相关联的字节输入流,从Socket中读取数据
.getOutputStream 与Socket相关联的字节输出流,向Socket中写入数据
ServerScoket 服务器Socket,提供服务,参数port不能是已经使用的
0 ~ 1024 未被系统使用或保留的端口号,0 ~ 65535为有效的端口号, 也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范 围内的整数数字。
常用方法
.accept() 监听有没有客户端连接到服务器,连接到后返回客户端Scoket对象,如果一直没有客户端,则一直阻塞等待
.close 关闭ServerSocket
TCP编程
客户端
-
创建Socket
-
打开连接到Socket的getOutputStream() 和 getInputStream (),输出流将信息写入线程
-
按协议对Socket进行读写操作
-
关闭Socket
服务器端
-
创建ServerScoket,绑定接口
-
调用accept(),监听连接请求
-
调用 该Socket类对象的 getOutputStream() 和 getInputStream ():获取 输出流和输入流,开始网络数据的发送和接收。
-
关闭ServerScoket
UDP编程
类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序
流程
-
DatagramSocket与DatagramPacket
-
建立发送端,接收端
-
建立数据报
-
调用Socket的发送、接收方法
-
关闭Socket