课程链接:https://edu.aliyun.com/course/1012
第1~6章 关于线程:https://blog.csdn.net/weixin_43494837/article/details/113764127?spm=1001.2014.3001.5501
第7~14章 类库+正则+国际化+比较器:https://blog.csdn.net/weixin_43494837/article/details/113764156?spm=1001.2014.3001.5501
第15~20章 关于IO:https://blog.csdn.net/weixin_43494837/article/details/113764173?spm=1001.2014.3001.5501
第21~27章 关于反射:https://blog.csdn.net/weixin_43494837/article/details/112797304?spm=1001.2014.3001.5501
第28~34章 关于类集:https://blog.csdn.net/weixin_43494837/article/details/113797177?spm=1001.2014.3001.5501
(思维导图在最后)
————————————————————————————————————
第35章:网络编程
课时152:网络编程简介
-
网络编程:多台主机之间的数据通讯操作。
-
网络程序的模型:
- C/S(Client客户端/Server服务器端):要开发两套程序,一套为客户端程序,一套为服务器端程序。如服务器端发生了改变,那么客户端也需要进行相应的更新处理。这种开发,可以由开发者自定义传输协议,并且使用一些比较私密的端口,安全性较高,但开发维护成本也较高。
- TCP:可靠的数据连接
- UDP:不可靠的数据连接
- B/S(Browse浏览器/Server服务器端):只开发一套服务器端程序,然后利用浏览器作为 客户端进行访问。这种开发,开发与维护的成本较低,但由于使用的是公共的HTTP协议以及公共的80端口,所以安全性较低。
现在开发基本以B/S为主,然而本次讲解主要为C/S。
- C/S(Client客户端/Server服务器端):要开发两套程序,一套为客户端程序,一套为服务器端程序。如服务器端发生了改变,那么客户端也需要进行相应的更新处理。这种开发,可以由开发者自定义传输协议,并且使用一些比较私密的端口,安全性较高,但开发维护成本也较高。
课时153:Echo程序模型
-
TCP:网络程序中最基本的开发模型。
-
实现TCP数据的交互处理:
- ServerSocket:服务器端。
- 主要目的:设置服务器端的监听端口。
- Socket:客户端,用来描述用户。
- 主要目的:指明要连接的服务器地址与端口。
- ServerSocket:服务器端。
-
实现(Echo模型):
-
代码(个人实现):
-
服务器端接收消息,客户端发送消息:
-
服务器端定义:
package cn.pjh.network; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class EchoServer { public static void main(String[] args) { ServerSocket server = null; Socket client = null; Scanner input = null; try { server = new ServerSocket(9999); // 定义服务器端 System.out.println("wait for client ......"); client = server.accept(); // 接收客户端的连接 input = new Scanner(client.getInputStream()); // 客户端输入流 while (input.hasNextLine()) { String str = input.nextLine().trim(); if (!str.isEmpty()) { if (str.equals("exit")) { System.out.println("client go offline."); return; } else System.out.println("client - " + str); } } } catch (Exception e) { e.printStackTrace(); } finally { try { server.close(); client.close(); } catch (Exception e) { e.printStackTrace(); } input.close(); } } }
-
客户端定义:
package cn.pjh.network; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class EchoClient { public static void main(String[] args) { Socket server = null; PrintWriter output = null; Scanner keyboard_input = null; try { server = new Socket("localhost", 9999); // 定义要连接的服务器端 output = new PrintWriter(server.getOutputStream()); // 服务器端输出流 boolean flag = true; while (flag) { System.out.print("to server: "); keyboard_input = new Scanner(System.in); String keyboard_str = keyboard_input.nextLine().trim(); output.println(keyboard_str); output.flush(); // 强制刷新缓冲区 if (keyboard_str.equals("exit")) flag = false; } } catch (Exception e) { e.printStackTrace(); } finally { try { server.close(); } catch (Exception e) { e.printStackTrace(); } output.close(); keyboard_input.close(); } } }
-
-
服务器端与客户端互发消息:
-
服务器端定义:
package cn.pjh.network; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class EchoServer { public static void main(String[] args) { ServerSocket server = null; Socket client = null; Scanner input = null; PrintWriter output = null; Scanner keyboard_input = null; try { server = new ServerSocket(9999); // 定义服务器端 System.out.println("wait for client ......"); client = server.accept(); // 接收客户端的连接 input = new Scanner(client.getInputStream()); // 客户端输入流 output = new PrintWriter(client.getOutputStream()); // 客户端输出流 while (input.hasNextLine()) { String str = input.nextLine().trim(); if (!str.isEmpty()) { System.out.println("client - " + str); if (str.equals("exit")) {
-
-
-