java核心类库——网络编程

Posted 白杨树&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java核心类库——网络编程相关的知识,希望对你有一定的参考价值。

一:概述:

1.网络常识

 

 

 

 

 

 

 

 

 

 2.网络编程协议:

 

(A B为友军,C为敌军,A告诉B要去攻打C,流程:1)A排探子去给C说这件事   2)C将A的探子留下,派出自己的探子到A去确认    3)A讲到C的探子,然后让C的探                                                                                           子回到C      4)C见自家的探子回来了,确认消息可靠,将A的探子放回去)

TCP通过这种连接协议,就很安全

 

 

3.

 

 

浏览器与服务器:优点:通过服务器可以及时的对版本进行跟新        缺点:不得不遵守浏览器创造的的规定,而且会造成数据泄露

客户端与服务器:优点:因为都是自己操控的,所以在修改版本的时候就很自由,安全。    缺点:只要用户不主动更新版本,服务器更新的内容客户端无法实现

 

4.

 .

 

OSI模型:举个栗子:你通过QQ发消息,就会经过应用层,到下一个层,直到物理层,然后经过网线,发生出去

四次挥手:1)A对C说,二弟我要走了,

                  2)C对A说,大哥你确定,

                  3)A对C说,我确定,

                  4)C对A说,好的再见。

二:学习两个类(来搭建 服务端-ServerSocket 和 客户端-Socket)

1.Socket是两台计算机之间通信的端点,是网络驱动提供给应用程序编程的一种接口,一套标准,一套机制。

2.工作流程:客户端通过ServerSocket和服务端建立一个练习,服务端也会返回一个Socket对象,然后两个Socket之间就可以进行通信。

3.网络编程,一定是现有服务器,然后我们客户端采取连接服务器(以后网络编程一定有两个主方法,一个是服务端,一个是客户端,先运行服务端,在运行客户端)

4.ServerSocket和Socket构造方法,和一些相关的内容。

 

 

 

 5.

5.1)代码演示:(一定要先启动服务器,等待客户端连接,然后在启动客户端,客户端的启动可以出发服务器执行任务)

我是服务器: 1 import java.io.IOException;

 2 import java.net.ServerSocket;
 3 
 4 public class Test01 {
 5     /**
 6      * 我是服务器
 7      * @param args
 8      */
 9     public static void main(String[] args) throws IOException {
10         //搭建服务器
11         ServerSocket socket = new ServerSocket(10008);
12         System.out.println("服务器搭建完成");
13         //等待客户端连接,只有当客户端连接上服务器后,服务器才会执行后面的代码。
14 Socket socket = socket.accept(); 15 System.out.println("一个客户端连接了"); 16 System.out.println("服务器执行结束"); 17 } 18 }

我是客户端:

 1 import java.io.IOException;
 2 import java.net.Socket;
 3 
 4 public class Test02 {
 5     /**
 6      * 我是客户端
 7      * @param args
 8      */
 9     public static void main(String[] args) throws IOException {
10         //创建客户端对象
11         Socket socket = new Socket("localhost",10008);
12 
13     }

5.2)建立完成之后,如何进行交流呢:创建联系之后,服务端和客户端都有了一个Socket对象,通过这个对象可以去调用输入输出流对象来进行消息的交流

 

5.3)代码演示:

服务器给客户端写消息

 1 import java.io.IOException;
 2 
 3 import java.io.OutputStream;
 4 import java.io.PrintStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 public class Test01 {
 9     /**
10      * 我是服务器
11      * @param args
12      */
13     public static void main(String[] args) throws IOException {
14         //搭建服务器
15         ServerSocket serversocket = new ServerSocket(10008);
16         System.out.println("服务器搭建完成");
17         //等待客户端连接
18         Socket socket = serversocket.accept();
19         System.out.println("一个客户端连接了");
20         /**
21          * 现在我要给客户端发消息
22          */
23         //1.获取一个输出流
24         OutputStream os = socket.getOutputStream();
25         //2.将输入流转换为一个打印流
26         PrintStream ps = new PrintStream(os);
27         //3.调用方法,打印
28         ps.println("客户端你好,欢迎连接本服务器");
29         System.out.println("服务器执行结束");
30     }

客户端接收服务器传来的消息

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.net.Socket;
 6 
 7 public class Test02 {
 8     /**
 9      * 我是客户端
10      */
11     public static void main(String[] args) throws IOException {
12         //创建客户端对象
13         Socket socket = new Socket("localhost", 10008);
14         /**
15          * 接收来自服务器的消息
16          */
17         //1.创建输入流
18         InputStream ps = socket.getInputStream();
19         //2.采用一次读一句
20         BufferedReader br = new BufferedReader(new InputStreamReader(ps));
21         String text = br.readLine();
22         System.out.println(text);
23     }
24 }

重点:服务器与客户端的交流是互相的,必须一次输出对应一个输入,这样才不会卡死。

 

6.在服务器中添加多线程

6.1)一个服务器肯定是要连接很多客户端的,这个时候需要在循环中创建一个子线程,来执行每个客户端与服务器的连接。

6.2)代码演示:(再次强调,客户端和服务端的输入输出是交叉的一个输入对应一个输出,不然会线程卡死)

 1 import java.io.OutputStream;
 2 import java.io.PrintStream;
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class Test01 {
 7     /**
 8      * 我是服务器
 9      *
10      * @param args
11      */
12     public static void main(String[] args) throws IOException {
13         //搭建服务器
14         ServerSocket serversocket = new ServerSocket(10008);
15         while (true) {
16             //等待客户端连接
17             Socket socket = serversocket.accept();
18             //客户端连接后就创建一个线程,让他同该客户端交流
19             new Thread() {
20                 @Override
21                 public void run() {
22                     try {
23                         //1.创建输出流
24                         OutputStream outputStream = socket.getOutputStream();
25                         //2.将输出流转换为打印流
26                         PrintStream ps = new PrintStream(outputStream);
27                         ps.println("客户端,你好呀");
28                     } catch (IOException e) {
29                         e.printStackTrace();
30                     }
31 
32                 }
33             }.start();
34         }
35     }
36 }

7.

 

 

 

 

 

 

 

 8.

 

 

 

 

 

 

 

 

总结:

网络编程只要是TCP协议,主流,其他的很少用,要用的时候在看下吧。

加油吧!

 

以上是关于java核心类库——网络编程的主要内容,如果未能解决你的问题,请参考以下文章

Java itext为pdf 文件添加水印核心功能代码片段

Java 核心类库 练习

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

Java核心类库-IO-包装流概述和缓冲流原理

转:java的各个拓展类库的推荐方案

java核心学习笔记 javaJDK目录阐述