码迷,mamicode.com
首页 > 编程语言 > 详细

java核心类库——网络编程

时间:2021-06-20 18:16:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:buffer   tcp   网线   搭建   更新   src   消息   实现   input   

一:概述:

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核心类库——网络编程

标签:buffer   tcp   网线   搭建   更新   src   消息   实现   input   

原文地址:https://www.cnblogs.com/baiyangshu/p/14906497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!