标签: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说,好的再见。
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协议,主流,其他的很少用,要用的时候在看下吧。
加油吧!
标签:buffer tcp 网线 搭建 更新 src 消息 实现 input
原文地址:https://www.cnblogs.com/baiyangshu/p/14906497.html