Java基础笔记五
八、GUI(图形用户界面)
1. 理解:图形用户接口,用图形的方式,来显示计算机操作的界面,这样更方便更直接
2. Awt与Swing
1) java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
2) javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,增强聊了移植性,属于轻量级控件
3. 布局管理器:
1) 布局:容器中组件的排放方式
2) 常见的布局管理器:
i. FlowLayout(流式布局管理器)
从左到右的顺序排列
Panel默认的布局管理器
ii. BorderLayout(边界布局管理器)
东、南、西、北、中
Frame默认的布局管理器
iii. GridLayout(网格布局管理器)
规则的矩阵
iv. CardLayout(卡片布局管理器)
选项卡
v. GridBagLayout(网格包布局管理器)
非规则的矩阵
4. 创建图形化界面
1) 创建frame窗体
2) 对窗体进行基本设置。比如大小、位置、布局
3) 定义组件
4) 将组件通过窗体的add方法添加到窗体中
5) 让窗体显示,通过setVisible(true)
5. 事件监听:
1) 事件源(组件)
2) 事件(Event):每一个事件源都有自己特有的对应事件和共性事件
3) 监听器(Listener):将可以触发某一个事件的动作都封装到监听器中
4) 事件处理(引发事件后处理方式)
九、网络编程
1. 网络编程:
1) 网络模型:
OSI参考模型
TCP/IP参考模型
2) 网络通讯要素:
i. IP地址
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
ii. 端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024系统使用或保留端口
iii. 传输协议
通讯的规则
常见协议:TCP、UDP
2. TCP和UDP
1) UDP:
i. 将数据及源和目的封装成数据包,不需要建立连接
ii. 每个数据报的大小限制在64K内
iii. 因无连接,是不可靠协议
iv. 不需要建立连接,速度快
2) TCP:
i. 建立连接,形成传输数据的通道
ii. 在连接中进行大数据量传输
iii. 通过三次握手完成连接,是可靠协议
iv. 必须建立连接,效率会稍低
3. Socket:
1) Socket是为网络服务提供的一种机制
2) 通讯的两端都是Socket
3) 网络通讯其实就是Socket间的通信
4) 数据在两个Socket间通过IO传输
4. UDP传输:
1) 传输过程:
i. DatagramSocket与DatagramPacket
ii. 建立发送端、接受端
iii. 建立数据包
iv. 调用Socket的发送接受方法
v. 关闭Socket
2) 发送端:在发送端,要在数据包对象中明确目的地IP及端口
i. 建立UDPsocket服务(DatagramSocket)
ii. 提供数据,并将数据封装到数据报中(DatagramPacket)
iii. 通过socket服务的发送功能(send),将数据报发出去
iv. 关闭资源
3) 接受端:在接收端,要指定监听的端口
i. 定义UDPsocket服务(DatagramSocket),通常会监听一个端口,其实就是给接受网络应用程序定义数字标识,方便于明确哪些数据该应用程序可以处理
ii. 定义一个数据报,因为要存储接受到的字节数据。因为数据报对象中有更多的功能可以提取字节数据中的不同数据信息。
iii. 通过数据报对象的特有功能(receive),将这些不同的数据取出
iv. 关闭资源
5. TCP传输:
1) 传输过程:
i. Socket和ServerSocket
ii. 建立客户端和服务端
iii. 建立连接后,通过Socket中的IO流进行数据的传输
iv. 关闭Socket
2) 客户端:
i. 客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常
ii. 连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可
iii. 与服务端通讯结束后,关闭Socket
3) 服务端:
i. 服务端需要明确它要处理的数据是从哪个端口进入的
ii. 当有客户端访问时,要明确是哪个客户端对象,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输
iii. 当该客户端访问结束,关闭该客户端
4) 传输出现问题:
i. 问题:客户端连接上服务端,两端都在等待,没有任何数据传输
ii. 原因:read方法或者readLine方法是阻塞式
iii. 解决:自定义结束标记
使用shutdownInput,shutdownOutput方法
5) 键盘录入时,一定要注意结束标识(newLine)