TCP和UDP协议
TCP和UDP协议是传输层的两种协议。Socket是传输层提供给应用层的编程接口。
TCP:在网络通信中,TCP方式就类似于拨打电话,使用该方式进行网络通信时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发改数据。
UDP:UDP的方式就类似于发短信,使用这种方式进行网络通信时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得数据。
这两种传输方式都在实际的网络编程中使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则可以通过UDP方式进行传输,在一些程序中甚至结合使用这两种方式进行数据传输。
由于TCP需要建立专用的虚拟连接并确认传输是否正确,所以使用TCP方式的传输速度稍微慢一些,而传输时产生的数据量也要比UDP大。
【总结】TCP是面向连接的,传输数据安全、稳定,效率相对较低。UDP是面向无连接的,传输数据不安全,但效率较高。
TCP协议:三次握手*Three-way-Handshake)
TCP(Transfer Control Protocol)在建立连接时分为三步:
(1)请求端(客户端):发送一个包含SYN(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序列号。
(2)服务端在收到客户端的SYN报文后,将返回一个SYN+ACK报文,表示客户端的请求被接受。同时TCP序号被加1,ACK即确认(Acknowledgement)。
(3)客户端返回一个确认报文ACK给服务器端,同样TCP序列号被加1,至此一个TCP连接完成。然后开始通信,数据处理。
UDP协议:(数据报通信方式)
每个数据发送单元被统一封装成数据报包的方式,发送方将数据报包发送到网络,数据报包在网络中去寻找它的目的地。
1、请求-响应模式:
在“请求-响应”模式中,Socket类用于发送TCP消息;ServerSocket类用于创建服务器。
套接字Socket是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以通过网络连接的不同机器上。换句话说,套接字起到了通信端点的作用。单个套接字是一行数据交换。一旦建立套接字连接,数据即可在相同或不同的系统中双向或者单向发送,直到其中一个端点关闭连接。套接字与主机地址和端口地址相关联。主机地址就是客户端或服务器程序所在主机的IP地址。端口地址是指客户端或服务器程序使用的主机的通信端口。
在客户端和服务器中,分别创建独立的Socket,并通过Socket的属性将两个Socket进行连接,这样,客户端和服务器通过套接字所建立的连接即可使用输入输出流进行通信。
通过Socket的编程顺序:
- 创建服务器ServerSocket。在创建时,定义ServerSocket的监听端口(在这个端口接收客户端发来的消息)。
- ServerSocket调用accept()方法,使之处于阻塞状态。
- 创建客户端Socket,并设置服务器的IP地址及端口。
- 客户端发出连接请求,建立连接。
- 分别取得服务器和客户端Socket的InputStream和OutputStream。
- 利用Socket和ServerSocket进行数据传输。
- 关闭流及Socket。
UDP通信编程基本步骤:
- 创建客户端的DatagramSocket。创建时,定义客户端的监听端口。
- 创建服务器端的DatagramSocket。创建时,定义服务器端的监听端口。
- 在服务器端定义DatagramPacket对象,封装待发送的数据包。
- 客户端将数据报包发送出去。
- 服务器端接收数据报包。
反射机制:
java反射机制是java语言一个很重要的特性,是java“动态性”的重要体现。反射机制可以让程序在运行时加载编译器完全未知的类,是设计的程序更加灵活、开放。但是反射机制的不足之处会大大降低程序执行的效率。
动态语言:是指在程序运行时,可以改变程序结构或变量的类型。典型的动态语言有:Python、Ruby、JavaScript。。。
java反射机制的本质和Class类:
学习反射机制基本上就等同于学习Class类的用法。java反射机制让我们在程序运行状态中,对于任意一个类,都能知道该类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法。这种动态获取以及动态调用对象方法的功能就是“java的反射机制”。
核心设计模式:
设计模式(design pattern)是一套被反复使用、多数人知晓且经过分类编目的代码设计方法。使用设计模式时为了重用代码,使代码更容易被他人理解,保证代码的可靠性。使代码的编制真正实现了工程化。
GoF23设计模式:
【老鸟建议】学习设计模式,不在于死记硬背,而在于通过学习来更深刻的理解面向对象思想,掌握新的思维方式,体验经典设计之美。
GoF23设计模式
创建型模式 | 结构型模式 | 行为型模式 |
抽象工厂模式 工厂方法模式 单例模式 建造者模式 原型模式 | 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 | 责任链模式 解释器模式 模板方法模式 命令模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 访问者模式 |
用于创建对象 | 用于组织对象和类 | 关注对象之间的交互、相互通信和协作 |