网络
网络通信
IP地址
IP地址就是唯一标识主机的的地址。举个例子:假如说我们想要从主机A传信息给主机B,那么我们就要有主机B的网络地址信息起到标识作用,这个地址就称之为IP地址
IPV4:意思就是用4个字节内存表示一个IP地址
当我们进行网络通信的时候,我们首先要知道对方的IP地址,IP地址分为IPV4和IPV6,
IPV4是由4个字节标识的IP地址
如何查看IP地址?
1.window键+r 键,弹出窗口输入cmd
2.打开运行,之后再输入ipconfig
域名
把IP转换为域名是为了便于记忆
端口
我们进行访问时,通常是IP地址+端口号的形式去访问。。。。
假设我们输入的是一个域名,但是通过底层的协议可以映射为对应的IP地址,输入的IP地址就确定了你访问的是哪一个主机区域,再加上一个端口则是表示通过这个端口进入之后访问接收的是主机内的哪一种服务。。。。
一个服务只可以监听一个端口,当一个端口被监听占用的时候,其他的服务就不可以再监听这个端口了【就好像故宫的一个门,只可以对应一个进入门之后的景观景色】
端口就好像故宫的门,主机就是故宫,
通过输入这个IP地址我们找到故宫,输入端口号就是找到对应进入的门,,进入不同的门见到的景象不同对应上面说的就是对应的服务不一样
网络协议
数据的组织形式即是一种协议,,如图所示这个类的组织形式就是一种协议
协议总结:
1.协议就是为了保证两个程序之间能够进行通讯
2.协议有很多种可以是很NB的协议如TCP,UDP,IP等等。当然也可以是自己创建的一种协议【如上图,自己建一个类,这个类就是一个数据,这个数据的组织形式就是协议】,
3.协议就是数据的组织形式,
TCP协议
模拟一下三次握手,其实三次握手就是确认三次之后再进行,建立两者之间的连接。
确保无误之后再进行传输即可。。
那么由此可见,这是可靠的,,但是是效率低的
我们只是说了一声,并没有确定对方接收到了信息就离开了,所以UDP是不可靠的,但是速度快
UDP协议就好像是二者之间进行发送短信,不管对方是否已经接收到信息,我们直接进行发送信息了就。。。
InetAddress类
前面是电脑名称。后面是IP地址
上面方法的作用体现:
Socket
在数据通道的两端都有一个socket,我们可以通过getOutputStream去输出流到数据管道,也可以通过getInputStream输入流输入到我们所在的socket处,两个socket都可以进行这样的方法操作
Socket编程
TCP网络通信编程案例
案例1:
思路分析
服务端:
这里要关闭三个流
客户端
注意一下这个细节问题:参数的含义是什么?
注意:
在网络编程中,一定是Serve端先跑起来
案例2:
在上一题的基础上,我们多了一条从服务端回复一条信息的作用
但是值得注意的是,我们需要设置一个结束的标志。
当服务端发送信息给客户端之后,我们要设置一个结束标记
想一想:当你输出一个信息给对方时,如果你不给一个准确的标记给对方的话,你们两个互相输出,结果没有准确的结束标记,那么就无法确定你俩何时结束,,,
设置一个结束标记:
我们在输出流之后要记得写上结束标记
服务端:
客户端的输出流后面同理也要写上结束标记
客户端代码:
服务端代码:
案例3:
我们这里的思路就是那一条黄线所描述的思路。。。
当然绿线的思路把这个思路取反即可/。。。
客户端:
服务端:
自己再写了一遍:如下:
客户端代码:
服务端代码:
案例4【难点,重点】:
思路分析:
对于图片或视频,我们要使用的是字节流,因为是二进制文件。但是对于文本文件的读取我们可以是字符流
服务端:
客户端:
如何把工具类拷贝到我们的目录下?
netstat指令
本地地址就是本机的端口对应的IP地址号,,,外部地址就是链接主机端口的网络设备的IP地址
表示端口号为8888的主机地址,正在被LISTENING
一般我们认为本地地址就是服务端的地址,,外部地址就是客户端的地址。。当进行网络通信的时候就会这样显示
细节重点
证明如下:当我们进行win+r进行查看时,可以知道。。。
当客户端连接到服务端之后,实际上客户端也是通过一个端口和服务端进行通讯的,这个端口是TCP/IP随机分配的。。。如图所示即可:前者为本地地址,后者为外部地址
UDP网络编程【了解】
UDP原理图
InetAddress表示你要传送到哪一个主机
接收端
发送端
客户端
服务端
接收端
发送端
文件下载【难点】
InetAddress.getLocalHost()返回的是什么?
服务端
客户端
工具类:把流转化为对应的字节数组
总结:
1.当我们输入或输出相当于数据通道时,我们要进行使用端口Socket对象引用进行找到对应的流
2.当我们只是想要传输一个视频,音频文件时,我们需要先用流读取,这个流通常是包装流,并且是字节包装流,因为需要是二进制读取。读取之后,把这个读取文件的流转化为相对应的字节数组,我们需要把这个字节数组通过数据通道传递给另外一方