day 2021.6.7
ObjectInputStream
java.io.ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
构造方法:
ObjectInputStream(InputStream in)
创建从指定 InputStream 读取的 ObjectInputStream。
参数:
InputStream in:传递InputStream对象
序列化
PrintStream,打印流
java.io.PrintStream
特点:
1.只负责数据的输出,不负责数据的读取
2.不会抛出IOException
3.有特有的方法,println,print
System.out.println();
构造方法:
PrintStream(File file)
//输出的目的地是一个文件
PrintStream(OutputStream out)
//输出的目的地是一个字节输出流
PrintStream(String fileName)
//输出的目的地是一个文件路径
PrintStream继承了OutputStream
注意:
1.如果使用继承子父类的方法writer写数据,那么查看数据的时候会查询编码表
2.如果使用自己特有的方法print/println,写的数据原样输出。
打印流的使用
软件结构
C/S结构:
客户端服务器结构
B/S结构:
浏览器和服务器结构
网络通信协议
计算机网络可是多台计算机实现链接,位于同一个网络中的计算机进行链接和通信时,需要遵守一定的规则。
TCP/IP协议
传输控制协议/因特网互联协议,是最基本最广泛的协议。
协议分类
UDP:
用户数据报协议,无连接的通信协议
特点:耗资小,速率高,投资小
TCP:
传输控制协议,面向连接的通信协议,每次链接的创建都需要经过三次握手
三次握手:
第一次:客户端像服务器端发出连接请求,等待服务器确认
第二次:服务器端像客户端回送一个相应,通知客户端收到了链接请求
第三次:客户端再次向服务器端发送确定信息,确认连接
IP地址
IPV4:是一个32为的二进制数,被分为4个字节,表示成a,b,c,d都是0~255之间的十进制正数:例如192.168.65.100
IPV6:128位的二进制数,每16个字节一组,分成8组16进制数。
可以再cmd中使用ipconfig,可以查看本机的IP地址
使用ping,如果能ping同的话,说明可以进行网络通信
特殊IP地址:127.0.0.1,localhost。访问自己的IP
端口号
** TCP通信概述**
代码实现
服务器端
TCP通信的客户端:向服务器发送链接请求,给服务器发送数据,读取服务器回写的数据
java.net.Socket:实现客户端套接字
套接字:包含了IP地址和端口号的网络单位
构造方法:
Socket(String host, int port)
参数:
String host:服务器主机的名称/服务器的IP地址
int port:服务器的端口号
成员方法:
OutputStream getOutputStream() 返回此套接字的输出流。
InputStream getInputStream() 返回此套接字的输入流。
void close();关闭此套接字
实现步骤:
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
2.使用Socket对象中的方法getOutputStream()获取网络字节输出流对象
3.使用网络字节输出流对象getOutputStream对象中的writer方法,给服务器发送数据
4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
5.使用网络字节输入流InputStream对象中的read方法,读取服务器回写的数据
6.释放资源(Socket)
注意:
1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
2.当我们创建客户端流对象Scoket的时候,就会请求服务器和服务器经过三次五首简历链接通路
如果服务器没有启动,那么就会抛出异常
如果服务器已经启动,那么就可以进行交互
客户端
TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据
java.net.ServerSocket:此类实现服务器套接字
构造方法:
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
服务器端必须明确一件事情,必须得知道是那个客户端请求的服务器,所以可以使用accept方法,获取到请求客户端对象Socket成员方法
服务器的实现步骤:
1.创建服务器ServerSocket对象,和系统要指定的端口号
2.使用ServerSocket对象中的accept,获取到请求的客户端对象Socket
3.使用Socket中的getInputStream方法获取字节输入流InputStream对象
4.使用网络字节输入流InputStream对象中的read方法,读取客户端发送的数据
5.使用Socket对象中的getOutputStream方法获取网络字节输出流OutputStream对象
6.使用网络字节输出流OutputStream对象中的方法writer,给客户端回写数据
7.释放资源(Socket,ServerSocket)