------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程
说到网络编程,我们可以理解为从一开始的单机操作变成多机操作,在本机内的数据传输,已经在我们调用的代码内部封装好了如何传输、传输的过程,比如使用File类操作文件,使用IO流对数据的读取和写入。但是网络编程和本地不同,根据面对对象的思想:计算机本地操作,我们可以把数据的传输当成计算机内部封装,内部调用。不同的计算机的连接靠的是网线,接口等,我们就可以通过这样的思想来理解java的net包的设计思想。
一、网络参考模型:
OSI的描述:
1.物理层:物理设备,网线的接口类型,光纤的接口类型等。作用:传输比特流。
2.数据链路层:将物理层接收的数据进行mac地址的封装和解封装。常把这一层的数据叫做帧。设备对应是交换机,数据时通过交换机来传输的。
3.网络层:主要将下层接收到的数据进行IP地址的封装和解封装。设备对应为路由器,这一层数据叫做数据包。
4.传输层:定义了一些传输数据的协议和端口号,TCP、UDP等协议。
5.会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通道。主要在你的系统之间发起会话或者接收会话请求。
6.表示层:主要是进行对接收的数据的解释,加密与解密、压缩与解压缩等(也就是把计算机能够是别的东西换成人能识别的东西)。
7.应用层:主要是一些终端的应用,比如说FTP服务、WEB、QQ等。
注:计算机(计算机安装的应用程序)之间的通信,就是将数据经过上述的层层封装,发送出去,接收端在层层解封,读取出数据。
二、网络通讯的几个关键的词:
1. ip地址:InetAddress(网络设备的标示)。
本地回环地址:127.0.0.1,使用主机名:localhost(没有互联网的情况下,可以使用这个地址进行本机的访问,模仿互联网的访问)
注:因为ipv4已经不够大家分的了,所以又有了ipv6.
InetAddress:表示IP地址的类(无构造方法)。
常用方法:
|-byte[]getAddress();//返回该InetAddress对象的原始IP地址
|--InetAddressgetByAddress(byte[] addr);//在给定原始IP地址的情况下,返回InetAddress对象
|--InetAddressgetByName(String host);//给定主机名的情况下确认主机的ip地址。
|--InetAddressgetLocalHost();//返回本地主机
示例:
import java.net.*;
class IPDemo
{
public static void main(String[] args) throws Exception
{
sop("-------本地主机名---------");
InetAddress ip = InetAddress.getLocalHost();
sop(ip.getHostAddress());
sop(ip.getHostName());
sop("--------其他主机-----------");
InetAddress ip1 = InetAddress.getByName("www.baidu.com");
sop(ip1.getHostAddress());
sop(ip1.getHostName());
}
public static void sop(Object obj){
System.out.println(obj);
}
}
result:
2. 端口号:用于标示进程(应用程序)的逻辑地址,不同进程的标识。
假如我们把ip地址当成xx路xx大厦,那么端口号就是具体的房间名,比如五楼的第三个房间。
有效的端口号:0—65535,其中0—1024是系统使用或保留的端口。
注:防火墙,就是将发送到某个程序端口的数据屏蔽以及将从该程序端口发出的数据也屏蔽。
3. 传输协议:
常见的传输协议:UDP、TCP
UDP: 将数据机源目标封装在数据包中,不需要建立连接。
每个数据报包的大小限制在64k内。
优点:无需建立连接,速度快。
缺点:无连接,不可靠。
生活场景对应:对讲机,某一个对讲机发出的信号,不管对方有没有开对讲机,都会发送,不管有没有接收到。使用场景:QQ、在线视频等。
TCP: 建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
优点:要通过三次的握手完成连接,是可靠的连接。
缺点:必须建立连接才能传输数据,效率会较低。
生活场景对应:打电话,必须对方接听才能进行通话,无论哪一方断开,通话结束。使用场景:迅雷