JavaSE内容整理十二

网络编程

一、网络编程定义
1、网络编程主要解决计算机与计算机(手机、平板…)之间的数据传输问题
2、网络通讯的三要素:IP、端口号、协议。
3、IP:Internet上的每台主机(Host)都有一个唯一的IP地址。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如159.226.1.1。(四个字节)。
4、InetAddress类:此类在java.net包下,表示互联网协议 (IP) 地址。
常用方法:
getLocalHost(); 获取本机的IP地址对象
getByName(“IP或者主机名”) 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。 (用于获取别人的IP地址对象)
getHostAddress() 返回一个IP地址的字符串表示形式。
getHostName() 返回计算机的主机名。
案例:
InetAddress address = InetAddress.getLocalHost();
System.out.println(“IP地址:”+address.getHostAddress());
System.out.println(“主机名:”+address.getHostName());

//可以根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。
InetAddress address = InetAddress.getByName(“song-pc”);
System.out.println(“IP地址:”+address.getHostAddress());
System.out.println(“主机名:”+address.getHostName());
5、子网掩码:子网掩码:用来表明IP地址哪一个是网络号,哪一个是主机号。
例如: Ipv4:192,168,1,5
子网掩码:255.255.255.0
255部分是网络号,最后一位是主机号 也就是 192 168 1 是网络号 5是主机号
6、端口:
如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。

二、网络编程协议
1、UDP
(1)将数据极其源和目的封装为数据包,不需要建立连接。
(2)因为无连接,所以不可靠,但是速度快。
(3)每个数据包大小限制在64K中
(4)UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境;
(5)如:飞秋、发短信等
2、TCP
(1)面向连接,有特有的通道
(2)在连接中传输大数据量
(3)通过三次握手机制连接,可靠协议
(4)通信前必须建立连接,效率稍低
(5)适用对可靠性要求高的应用环境
(6)如:打电话,文件的传送.

3、TCP协议的三次握手和四次挥手原理(重点)
Seq:序列号 根据列号标识某个操作
A→seq=1
b→ack=seq+1
ACK:确认标志 确认编号
注意:在响应ACK的形式如果确认则ack=对方主机的seq+1
SYN:同步标志
同步序列编号该标志仅在三次握手建立TCP连接时有效,它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号.(连接时使用的握手信号)。
FIN:结束标志
带有该标志置位的数据包用来结東一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

三次握手:创建连接
在这里插入图片描述
TCP三次握手过程
1、主机A通过向主机B发送一个含有同步(SYN)序列号(seq)的标志位的数据段给主机B.向主机B请求建立连接.
通过这个数据段,主机A告诉主机B我想要和你通信:
2、主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A
也告诉主机A我已经收到你的请求了,你可以传输数据了:
3、主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段
我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机A和主机B就可以传输数据了。

四次挥手:断开连接
在这里插入图片描述
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1.和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1.

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次挥手?・
答:因为当 Server端收到 Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文
其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当 Server端收到FIN报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个ACK报文,告诉 client 端,"你发的FIN报文我收到了”,只有等到我 Server端所有的报文都发送完了,我
才能发送FIN报文,因此不能一起发送。故需要四步挥手。

4、Http协议
当我们在浏览器地址栏中输入一个网址(URL)并按下回车键时,或者点击网页上的超级链接时,或者在网页上填写一个表单点击了提交按钮时,都称为“向服务器端提交了一次HTTP请求”;
HTTP协议中定义了多种请求方式,常用的请求方式有:
GET:最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。
POST:POST方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。使用表达提交基本都用POST方式。
HEAD:HEAD和GET类似,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。

5、Socket
(1)Socket通常称作“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,一个Socket由一个IP地址和一个端口号唯一确定。
(2)原理
在这里插入图片描述
(3)常用方法:
在这里插入图片描述
(4)TCP通讯线程特性
客户端步骤:
在这里插入图片描述
服务端步骤:
在这里插入图片描述
案例:
在这里插入图片描述在这里插入图片描述

(5)UDP通信协议
udp协议下的Socket:
DatagramSocket(udp插座服务)
DatagramPacket(数据包类) DatagramPacket(buf, length, address, port)
buf: 发送的数据内容
length : 发送数据内容的大小。
address : 发送的目的IP地址对象
port : 端口号。

步骤:
1、建立udp的服务----DatagramSocket
2、准备数据,然后把数据封装 到数据包中–DatagramPacket
3、调用udp的服务发送数据—send
4、关闭资源

飞Q接收的数据格式:
version:time :sender : ip: flag:content ;
版本号:时间 :发送人 :IP: 发送的标识符(32): 真正的内容;

案例:与内网通通信
在这里插入图片描述

(6)使用多线程实现对象传输:
在这里插入图片描述在这里插入图片描述

实体类需要序列化
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值