Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)
Posted 水木山川
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)相关的知识,希望对你有一定的参考价值。
22天-01-GUI
GUI:Graphical User Interface 图形用户接口
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中
CLI:Common line User Interface 命令行用户接口
Awt:Abstract Window ToolKit(抽象工具包),需要调用本地系统方法实现功能,属于重量级控件。
Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属于轻量级控件。
继承关系:
Component Container Window、Panel Frame、 Dialog FileDialog
Button、Label、Checkbox、TextComponent TextArea、TextField
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来。
Swing继承关系图:
布局:容器中的组件排放方式
常见的布局管理器:
FlowLayout: 流式布局管理器,从左到右的顺序排列,Panel默认的布局管理器
BorderLayout: 边界布局管理器,中东南西北,Frame默认的布局管理器
GridLayout: 网格布局管理器,规则的矩阵
CardLayout: 卡片布局管理器,选项卡
GridBagLayout: 网格包布局管理器,非规则的矩阵
事件监听机制的特点:
1.事件源:就是awt包或者swing包中的那些图形界面组件。
2.事件:每一个事件源都有自己特有的对应事件和共性事件。
3.监听器:将可以触发某个事件的动作(不止一个动作)都已经封装到了监听器中。
4.事件处理
制作可执行文件:
1.制作配置文件config.txt,冒号后面必须有一个空格,最后一行必须换行
Main-Class: myPackage.ExecuteFile
2.先编译 javac -d packagePath File.java
javac -d . ExecuteFile.java
3.打包 jar -cvfm package.jar config.txt PackageDirectory
jar -cvfm ExecuteFile.jar config.txt myPackage
ExecuteFile示例:
1 package myPackage; 2 import java.util.*; 3 import java.io.*; 4 import java.awt.*; 5 import java.awt.event.*; 6 7 public class ExecuteFile 8 { 9 private Frame fr; 10 public static void main(String[] args)throws IOException 11 { 12 new ExecuteFile(); 13 } 14 public ExecuteFile() 15 { 16 init(); 17 } 18 private void init() 19 { 20 fr=new Frame("Demo"); 21 fr.setSize(400,500); 22 fr.setLocation(200,100); 23 fr.setVisible(true); 24 fr.addWindowListener(new WindowAdapter(){ 25 public void windowClosing(WindowEvent e) { 26 System.exit(0); 27 } 28 }); 29 } 30 }
1 Main-Class: myPackage.ExecuteFile
23天-01-网络编程
网络基础知识:
IP地址:网络中设备的标识
本地回环地址: 127.0.0.1 主机名:localhost
端口号:用于标识进程的逻辑地址,不同进程的标识。有效端口号:0~65535,其中0~1024为系统使用或者保留端口。
Internet默认端口: 80 tomcat默认端口:8080 数据库默认端口:3306
传输协议:计算机之间通信的规则。常见协议:TCP,UDP
OSI模型: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP模型: 应用层, 传输层,网络层, 主机至网络层
UDP:将数据及源和目的封装成数据包中,不需要建立连接,每个数据报的大小限制64k内,因无连接,是不可靠协议,不需要建立连接,速度快。
TCP:建立连接,形成传输数据的通道,在连接中进行大量数据传输,通过三次握手完成连接,是可靠协议,必须建立连接,效率稍低。
TCP与UDP区别:
1、TCP面向连接(如打电话要先拨号建立连接); UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流; UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的; UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节; UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道; UDP则是不可靠信道
Socket:是为网络服务提供的一种机制,通信的两端都有Socket,数据在两个Socket间通过IO传输。
注:IP地址段中,一个网段的最后两段是1.0和1.255时比较特殊,1.0 表示一个区域的网络地址-网络段,1.255代表此网段的广播地址
UDP传输:
UDP发送端:
1.建立UDPSocket服务,通过DatagramSocket对象建立;
2.获取数据,并将数据封装到数据包中,数据包对象DatagramPacket;
3.通过Socket服务的发送功能send();方法,将数据包发送出去;
4.关闭资源。
UDP接收端:
1.定义UDPSocket服务,建立DatagramSocket对象时通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识。方便于明确哪些数据过来该应用程序可以处理;
2.定义一个数据包用来存储接收到的字节数据。数据包对象中有很多功能可以提取字节数据中的不同数据信息,数据包DatagramPacket对象;
3.通过服务DatagramSocket的receive();方法将接收到的数据存入数据包对象中;
4.在数据包DatagramPacket对象中将这些不同的数据取出来。
5.关闭资源。
Socket UDP聊天软件聊天示例:
1 /** 2 * 模拟聊天软件,有收数据的部分和发送数据的部分。这两部分需要同时执行, 3 * 使用多线程技术一个线程控制收,一个线程控制发。 4 * 因为收和发动作不是一致的,所以要定义两个run方法,而这两个方法要封装到不同类中 5 */ 6 class Demo 7 { 8 public static void main(String[] args) throws Exception 9 { 10 DatagramSocket send = new DatagramSocket(); 11 DatagramSocket receive = new DatagramSocket(10001); 12 new Thread(new UDPSend(send)).start(); 13 new Thread(new UDPReceive(receive)).start(); 14 } 15 } 16 17 class UDPSend implements Runnable 18 { //发送端 19 private DatagramSocket ds; 20 UDPSend(DatagramSocket ds) 21 { 22 this.ds = ds; 23 } 24 public void run() 25 { 26 try 27 { 28 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 29 String temp; 30 while ((temp = br.readLine()) != null) 31 { 32 if ("exit".equals(temp)) 33 { break;} 34 byte[] line = temp.getBytes(); 35 DatagramPacket dp = new DatagramPacket(line, line.length, InetAddress.getByName("192.168.0.255"), 10001); 36 ds.send(dp); 37 } 38 ds.close(); 39 } 40 catch (Exception e) 41 { 42 e.getStackTrace(); 43 } 44 } 45 } 46 47 class UDPReceive implements Runnable 48 { //接收端 49 private DatagramSocket ds; 50 UDPReceive(DatagramSocket ds) 51 { 52 this.ds = ds; 53 } 54 public void run() 55 { 56 try 57 { 58 while (true) 59 { 60 byte[] line = new byte[1024 * 64]; 61 DatagramPacket dp = new DatagramPacket(line, line.length); 62 ds.receive(dp); 63 String ip = dp.getAddress().getHostAddress(); 64 String data = new String(dp.getData(), 0, dp.getLength()); 65 System.out.println(ip + ": " + data); 66 } 67 } 68 catch (Exception e) 69 { 70 e.getStackTrace(); 71 } 72 } 73 }
TCP传输:
1.TCP分客户端和服务端,分别是独立的两个应用程序。
2.客户端对应的对象是Socket,服务端对应的是ServerSocket,建立连接后,通过Socket中的IO流进行数据的传输
客户端:通过Socket对象,建立连接指定主机的连接。因为TCP是面向连接的,所以在建立Socket连接时,就要有服务端存在,并确保连接成功形成通路后,在该通道进行数据的传输。
客户端建立步骤:
1.创建客户端Socket服务,并指定要连接的主机和端口;
2.准备发送数据,获取Socket流中的输出流;
3.关闭资源。
服务端:
服务端建立步骤:
1.建立服务端的Socket服务,ServerSocket(port);并监听一个端口;
2.获取连接过来的客户端对象。通过ServerSocket的accept();方法,在没有连接时就会等待,所以这个方法是阻塞式的;
3.客户端如果发过来数据,那么服务端要使用对应的客服端对象,并获取到该客户端对象的读取流来读取发过来的数据;
4.关闭客户端,服务端一般不关闭(可选)。
TCP文件上传示例:
1 /** 2 * 实现并发上传数据 3 * 服务端采用多线程,给每一个客户端访问连接分配一个线程,实现并发多客户端访问服务端 4 */ 5 class FileClient 6 { 7 public static void main(String[] agrs) throws Exception 8 { 9 Socket s = new Socket("192.168.0.102", 10000); 10 OutputStream out = s.getOutputStream(); 11 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 12 System.out.println("upload file name or full path:"); 13 //客户端准备上传的文件名 14 String fileName = br.readLine(); 15 System.out.println("server file name:"); 16 //上传文件在服务端名称 17 String modifyName = br.readLine(); 18 out.write(modifyName.getBytes()); 19 20 FileInputStream fis = new FileInputStream(fileName); 21 byte[] b = new byte[1024]; 22 int len; 23 while ((len = fis.read(b)) != -1) 24 { 25 out.write(b, 0, len); 26 } 27 s.shutdownInput(); 28 s.close(); 29 } 30 } 31 class ServerThread implements Runnable 32 { 33 private Socket s; 34 ServerThread(Socket s) 35 { 36 this.s = s; 37 } 38 @Override 39 public void run() 40 { 41 String ip = s.getInetAddress().getHostAddress(); 42 try 43 { 44 System.out.println(ip + ".....connected success"); 45 byte[] b = new byte[1024]; 46 int len; 47 InputStream in = s.getInputStream(); 48 len = in.read(b); 49 String fileName = new String(b, 0, len); 50 FileOutputStream fos = new FileOutputStream(fileName); 51 byte[] bt=new byte[1024]; 52 while ((len = in.read(bt)) != -1) 53 { 54 fos.write(bt, 0, len); 55 } 56 OutputStream out = s.getOutputStream(); 57 out.write(("上传成功:" + fileName).getBytes()); 58 fos.close(); 59 s.close(); 60 } 61 catch (Exception e) 62 { 63 System.out.println(ip + "......upload fail"); 64 System.out.println(e.getStackTrace()); 65 } 66 } 67 } 68 class FileServer 69 { 70 public static void main(String[] agrs) throws Exception 71 { 72 ServerSocket ss = new ServerSocket(10000); 73 while (true) 74 { 75 Socket s = ss.accept(); 76 new Thread(new ServerThread(s)).start(); 77 } 78 } 79 }
TCP登录示例:
1 /** 2 * 客户端通过键盘录入用户名和密码,服务端对这个用户名和密码进行校验 3 * 如果该用户名存在,并且密码正确,在服务端显示XX已登录,并在客户端显示XXX,欢迎光临 4 * 如果该用户尝试三次登录,用户名和密码没有同时校验通过,则关闭客户端 5 */ 6 class LoginClient 7 { 8 public static void main(String[] args) throws Exception 9 { 10 Socket s = new Socket("192.168.0.102", 10000); 11 BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); 12 BufferedReader bfw = new BufferedReader(new InputStreamReader(s.getInputStream())); 13 PrintWriter pw = new PrintWriter(s.getOutputStream(), true); 14 15 for (int i = 0; i < 3; i++) 16 { 17 System.out.println("user name:"); 18 String userName = bfr.readLine(); 19 System.out.println("user password:"); 20 String userPwd = bfr.readLine(); 21 pw.println(userName); 22 pw.println(userPwd); 23 String data = bfw.readLine(); 24 String[] result = data.split(":"); 25 if ("true".equals(result[0])) 26 { 27 System.out.println(userName + ",欢迎光临!"); 28 break; 29 } 30 else 31 { 32 System.out.println(userName + ",登录失败! " + result[1]); 33 } 34 } 35 bfr.close(); 36 pw.close(); 37 s.close(); 38 } 39 } 40 class UserThread implements Runnable 41 { 42 private Socket s; 43 UserThread(Socket s) 44 { 45 this.s = s; 46 } 47 @Override 48 public void run() 49 { 50 String ip = s.getInetAddress().getHostAddress(); 51 try 52 { 53 System.out.println(ip + "......connected success"); 54 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); 55 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 56 57 for (int i = 0; i < 3; i++) 58 { 59 String userName = br.readLine(); 60 String userPwd = br.readLine(); 61 if (userName.isEmpty() || userPwd.isEmpty()) 62 { 63 bw.write("false:The user name or password can not be empty"); 64 bw.newLine(); 65 bw.flush(); 66 System.out.println("user name or password is empty"); 67 continue; 68 } 69 String pwd = getConfigInfo("config.properties", userName); 70 if (!userPwd.equals(pwd)) 71 { 72 bw.write("false:The username or password is wrong"); 73 bw.newLine(); 74 bw.flush(); 75 System.out.println("user password is wrong"); 76 } 77 else 78 { 79 System.out.println("user is Login"); 80 bw.write("true:Login success"); 81 bw.newLine(); 82 bw.flush(); 83 break; 84 } 85 } 86 br.close(); 87 bw.close(); 88 s.close(); 89 System.out.println(ip + "......disconnected"); 90 } 91 catch (Exception e) 92 { 93 System.out.println(ip + "......connected fail"); 94 System.out.println(e.getMessage()); 95 StackTraceElement[] stack = e.getStackTrace(); 96 if (stack != null) 97 { 98 for (int i = 0; i < stack.length; i++) 99 { 100 System.out.println(stack[i].toString()); 101 } 102 } 103 } 104 } 105 106 /** 107 * 获取配置文件信息 108 * 109 * @param filePath 文件路径 110 * @param key 键值 111 * @return 值 112 */ 113 private String getConfigInfo(String filePath, String key) 114 { 115 Properties properties = new Properties(); 116 try 117 { 118 properties.load(new BufferedReader(new FileReader(filePath))); 119 return properties.getProperty(key); 120 } 121 catch (FileNotFoundException e) 122 { 123 e.printStackTrace(); 124 } 125 catch (IOException e) 126 { 127 e.printStackTrace(); 128 } 129 return null; 130 } 131 } 132 class LoginServer 133 { 134 public static void main(String[] args) throws Exception 135 { 136 ServerSocket ss = new ServerSocket(10000); Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)