一、重点知识
网络参考模型概念七层,我们一般看为四层
UDP每个包64kb
查看ip命令:ipconfig
测试ip指令 ping
同一台电脑使用重复端口时,如果两个程序都被启动了会报异常
unknowhostexception不识别的主机异常,编译时异常
一个域名可以有多个主机,用getAllByName()方法获得所有的主机ip地址
两台机器之前通讯,就是socket通讯
Serversocket.accept 是一个会阻塞程序继续执行的方法
实际上在资源关闭中,只关闭socket就好了,再关闭socket时会关闭他创建的流
二、课堂知识
2.1、对象流(操作对象的)
ObjectInputStream
readObject()--->Object--->子类对象即可。
ObjectOutputStream
writeObject(Object obj)
没有实现Serializable接口报错:java.io.NotSerializableException: com.qf.demo02.Person
就是说Person这个类,没有被序列化。没有实现Serializable接口。
java.io.Serializable接口:类要想具有序列化的功能,那么需要实现java.io.Serializable接口的类启用。 如果没有实现该接口,那么类的实例不会具有序列化和反序列化的功能。
该接口没有任何的方法需要实现。我们称为“标记接口”。
序列化和反序列化:
序列化:将对象,转为一系列的二进制编码。p1--->0101010101011....
反序列化:将二进制数值,再转为对象的过程,就叫反序列化。0101010101011....--->p1
serialVersionUID,每一个实现java.io.Serializable的类,表示能够被序列化和反序列化。都需要提供一个serialVersionUID序列化的版本号。如果代码中没有显示的提供,那么程序中自动生成(类中的结构:属性,方法)。序列化的对象的serialVersionUID和反序列化回来的时候serialVersionUID要对应上,否则异常:java.io.InvalidClassException
在每个类实现java.io.Serializable接口的时候,提供一个固定的serialVersionUID。
构造方法:
ObjectOutputStream(OutputStream out)
创建一个写入指定的OutputStream的ObjectOutputStream。
ObjectInputStream(InputStream in)
创建从指定的InputStream读取的ObjectInputStream。
序列化的注意点:对象
1、对象的属性能够被序列化,static的属性不能被序列化。
2、transient修饰符,使用该修饰符修饰的属性,不会被序列化的。
2.2TCP协议和UDP协议
2.2.1TCP协议
1、面向连接,数据传递的时候很安全。
三次握手,四次挥手。
2、因为面向连接,所以传递的效率较低。
3、面向连接,数据安全的。可以传递大量的数据。
4、服务端和客户端
服务端:提供服务的
客户端:来访问服务端,获取数据
客户端登录,数据下载,文件传输。。
2.2.2UDP协议:
1、面向无连接,数据传的时候不是很安全。
2、因为面向无连接,效率很高。
3、UDP
4、没有客户端和服务端的概念。叫做发送方,另一个叫接收方。
2.3、网络编程的三要素
2.3.1、协议
理解为是规则,网络上的双方,都要共同遵守的规定。
TCP/UDP
2.3.2、IP地址
在网络中的主机的唯一标识。
2.3.3、port端口
网络程序的唯一标识。int类型的整数。0-65535。
同一台电脑上一个端口只能被一个网络程序所占用。
A程序:占用端口9527。启动后,正在使用9527端口,那么其他的程序如果还使用9527端口,就会报错,端口已经被占用。
2.4、网络编程相关的类:
2.4.1、InetAddress
Java中用于描述IP的类
2.4.2、Socket
基于TCP协议的客户端的表示。
2.4.3、ServerSocket
基于TCP协议的服务端的表示。
2.5、TCP编程的流程
服务端流程
step1:创建ServerSocket,一个服务端的程序:
step2:等待客户端申请链接,accept()接收链接。——>Socket
step3:创建流:InputStream,OutputStream
step4:关闭链接,断开资源
客户端流程
step1:创建Socket,客户端的程序
申请链接服务器:(服务器的ip地址和port)
step2:创建流:InputStream,OutputStream
step3:关闭链接,断开资源