网络编程
OSI模型
计算机网络是处于不同地理位置的计算机系统,通过通信设备和线路连接起来,以网络软件实现资源共享的系统。
在计算机网络中,存在不同厂商,不同结构的产品。这些网络产品在进行互连时会遇到不兼容的问题。
国际标准化组织ISO提出了OSI(Open Syetem Interconnection)开放系统互联的参考模型,为异构系统互联提供了概念性的框架。
OSI参考模型采用分层结构,将网络分为七层:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP模型
OSI参考模型的过于庞大、复杂招致了许多批评。技术人员自己开发的TCP/IP协议栈,将
OSI模型中的某些层进行了合并,获得了更为广泛的应用。
TCP/IP分层
- 应用层(合并应用层、表示层、会话层)
- 应用层的功能对客户发出的一个请求,服务器作出响应并提供相应的服务。
- 传输层(相当于OSI传输层)
- 传输层的功能为通信双方的主机提供端到端的服务,传输层对信息流具有调节作用,提供可靠性传输,确保数据到达无误。
- 网络互连层(相当于OSI网络层)
- 网路互连层功能为进行网络互连,根据网间报文IP地址,从一个网络通过路由器传到另一网络。
- 网络接口层(合并数据链路层、物理层)
- 网络接口层负责接收IP数据报,并负责把这些数据报发送到指定网络上。
网络主机寻址
网络编程的实质就是编写程序直接或间接的通过网络协议与其它计算机上的某个程序进行通讯。
提供了IP地址和端口号,就可以找到网络上指定主机上要进行通讯的指定程序。
端口
端口,就是应用程序用于数据交互的通道,用于实现程序间的通信。每个应用程序都有固定的端口。
两个应用程序如果使用同一个端口,那么会抛出端口冲突异常java.net.BindException
常用端口
- Telnet协议tel:23端口
- 简单邮件传输协议smtp:25端口
- 文件传输协议:21端口
- 超文本传输协议http:80端口
传输层传输数据
数据传输由TCP/IP分层模型中的传输层负责,该层包含TCP和UDP两种协议
TCP协议
是一种比较可靠的双向传输协议。提供三次握手机会。提供消息确认、错误检测和错误恢复等服务。如果数据在传输过程中有损耗,有遗失,会要求发送方重新发送。从而保证数据的完整性。
UDP协议
比较不可靠。如果数据传输中华有耗损,不会要求重发,优点是速度快。用于数据传输准性要求不高的场合。
客户机和服务器
客户机:向另一台计算机请求服务的计算机
服务器:处理客户端请求的计
html: 称为超文本标记语言。是一种以标记和子标记描述网页信息的语言。超文本,意味着html中包含信息不仅仅包含文本数据。而且,通过一系列标记,链接各式各样的资源(图片、css、js、音频、视频)。客户端要想正确显示html信息,除了需要下载文本数据,还要通过一系列的请求,将链接资源一一下载。
HTTP协议
请求行:包括请求方式、请求URL地址、http协议版本
请求头:以键值对方式,描述客户端相关信息。
空行:标识请求头的结束。
消息体(post):描述表单数据。
lambda表达式
事件中的lambda表达式
lambda表达式是JDK1.8以后提供的语法,简化了开发者的编码,底层还是一些常规的代码。
LovoButton add = new LovoButton("添加", 50, 80, this);
add.addActionListener(e->{
System.out.println("点击添加");
});
Lambda表达式的目标类型必须是一个函数接口。函数接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
lambda表达式的特殊语法
() ->{…} 1、如果函数接口的抽象方法无参,那么左边只需打上空括号。
() ->5+3 2、如果抽象方法的实现代码只有一句,那么,右边可以省略“{}”、return关键字和这条语句的“;”号
(x,y)->System.out.printle(x+y) 3、如果抽象方法带参,那么左边可以省略参数类型,形参名也无需持一致
str->System.out.println(str) 4、如果抽象方法只有一个形参,那么左边可以省略“()”
stream接口
Stream是java.util.stream包中定义的接口,其作用是提供一种声明式的方式来处理数据