网络模型常用: OSI参考模型与tcp/ip参考模型、
通信要素:ip,端口号,传输协议
通过ip找到对方主机,数据发送到指定到对方主机的应用程序,为了标识这些程序给这些程序用数字给这些程序进行标识,这个数组就是端口,他是逻辑端口,是主机虚拟的一个端口,没有物理存在,仅是为了区分网络程序
通信规则:网络通信需要遵守的规则,称之为通信协议
通信端口范围:0-65535,0-1024一般作为保留端口,在开发过程中尽量不要使用这些端口
传输层协议:tcp协议,udp协议
网际层协议:ip协议
应用层协议:http协议,ftp协议
本地回环地址:127.0.0.1表示本地主机地址,也可以用localhost表示,他是本地主机的主机名
通过getbyname(string)可以通过ip地址获取主机的ip对象,返回为一个ip对象
如果对象的ip与主机名不同时在网络上,通过这种方法获取ip对象,只能获取到ip作为ip对象,无法获得对象的主机名
inetaddress.getbyname(“www.baidu.com”)静态方法获取ip对象
getallbyname()返回为数组,获取的是所有的以参数为主机名的对象例如:
InetAddress[] ii=InetAddress.getAllByName("www.baidu.com");
tcp协议:面向连接的协议
通信可靠
不限制通信包大小
通过了3次握手,效率较低
udp协议:面向非连接的协议
通信不可靠,可能会丢包
限制通信包大小,最大为64kb
面向非连接,速度较快
socket:为网络服务提供的一种机制
udp协议的java socket对象:
DatagramSocket 发送与接收的socket对象,实现无连接通信
DatagramPacket 报文包对象
通信过程
发送端与接收端需要同时运行,否则会丢包或者无数据包
发送端
1.建立udp DatagramSocket服务
2.提供数据,封装到数据包中
3.通过socket将数据包发送出去
4.关闭资源
接收端
1.定义一个socket服务,并监听一个端口
2.定义一个空的数据包对象,用于存储数据
3.通过socket服务的receive方法把数据存入数据包对象
4.通过数据包对象的相应方法,取出需要的数据
5.关闭资源
tcp协议:
socket:客户端,它在创建过程中就需要连接服务器端并连接成功,形成通路后才能传输数据,如果不连通会报异常
serversocket:服务器端
客户端
1.创建socket,指定连接主机与端口
2.通过getoutputstream()与getinputstream()方法获取到输入输出流,操作数据
3.关闭端口
通路在建立后会有个数据流,可以发送也可以接收,可以返回相应的输入输出流
服务器端会在连接后获得客户端对象通过对象可以获取到输入输出流
服务器端
1.建立服务器端的socket对象,需要绑定端口
2.获取;连接的客户端对象,方法为accept(),这个方法时阻塞的
3.客户端发来数据,服务器端需要相应的客户端的输入输出流来读取和写入数据
4.关闭服务,即关闭连接,释放资源,客户端一般不关闭,也可以关闭
网络通信数据包包含:数据头跟数据报文,头跟数据之间会有空行作为分割标识
浏览器在处理时会自动把头解析掉
URL对象有很多getxxx方法来获取url的各部分信息,其中getquery()获取的是参数信息
在网络中如果不指定端口,端口为-1,但是一般我们会把他默认的把他设置为80
openconnection()返回一个到一个主机的连接对象,可以不写socket了,它内部封装了socket的操作
openstream()获取连接的流对象,相当于获取连接再获取流
无参数的socket,可以使用connect()连接主机,方法参数是封装了主机ip与端口的类对象
服务器创建时会设定连接的最大连接数
域名解析:在上网时,输入主机名,需要寻找到主机ip,他会去dns(域名解析器)去查询主机名与ip的映射表,把主机的ip返回给本机,然后再去该地址去建立连接
localhost与127.0.0.1的映射关系表存在于主机本地上,目录为c://system32/drivers/host中,映射的关系可以自由修改
上网时寻找ip,会先在本地查找如不在才回去dns寻找,这样我们就可以一些主机明与ip固化在本地,提高一些效率,更主要用途是屏蔽一些网站,使其指向本地ip,不会打开这些网址
|