网络编程顾名思义需要一个网络,通过网络进行操作的编程,那么对于网络编程,一般面试的时候都会有什么样的问题呢?
1,能够说出UDP和TCP协议的区别,或者说特点
2,TCP协议两个常用的类的名称
3,能够理解使用TCP上传案例
那么开始今天的知识点回顾:
一,软件架构CS/BS
1.1网络编程的入门:(对于网络编程我们首先要知道的)
CS结构:全程是Client/Server 客户端和服务器结构
BS结构:全称是Browser/Server 浏览器和服务器结构
网络编程就是在一定协议下实现两台计算机之间的通信。 两种架构各有优势 无论哪种都离不开网络的支持
1.2网络通信协议:通信协议是对计算机必须遵守的规则------完成数据交换
TCP/IP 传输控制协议/因特网互联协议 4层分层模型
1,物理层
2,数据链路层 底层网络协议
3,网络层 IP
4,传输层 TCP UDP
5,应用层 HTTP
1.3协议分类: java.net包下 包含类和接口
1.3.1TCP面向连接的通信协议 它会进行三次握手:
1,客户端向服务器端发送请求,等待服务器确认
2,服务器做出响应,确认请求
3,客户端再次向服务器端发出确认请求,确认连接
1.3.2UDP用户数据通信协议 面向无连接的协议,传输数据不需要连接
特点:传输快,但是容易丢失数据 ,不可靠
二,网络通信的三要素:网络协议 IP 端口号
2.1网络协议刚才上面已经回顾或了,那么对于IP我们知道自己的电脑IP么?
windos+r键打开我们的cmd控制台,输入IPconfig回车就可以看到我们自己电脑的IP
那么有时候我们向确认电脑能不能上网,怎么看呢?
只需要在控制台上输入ping空格域名就可以了,如果有返回说明能够上网
在这里特别强调一点我们自己电脑的本机IP:localhost 127.0.0.1
2.2端口号:网络通信的本质是两个进程(应用程序)用两个字节表示整数0-65535
0-1023不能用,因为知名网络服务已经用了
服务器端口号80
mysql:3306免费的
oracle:1521
三。TCP通信重点回顾
3.1要严格区分客户端Client和服务端:Server
两端通信的步骤:
客户端主动连接服务器 连接成功才能通信
服务端一定要先启动
3.2java中提供了两个类来实现TCP程序
java.net.Socket ------>创建对象Socket-----》发送请求给服务器 服务器做出响应两者建立通信
ServerSocket----->创建对象ServerSocket---->相当于开启一个服务 用来等待客户端连接
四。 4 Socket套接字 重点难点
4.1 概述:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
4.2 构造方法
public Socket(InetAddress address, int port) 创建对象 连接到主机的指定的端口号`
public Socket(127.0.0.1,6666);
4.3 成员方法
getInputStream()------>套接字的输入流
getOutputStream()------>套接字的输出流
close();
shutdownOutput();禁用此套接字的输出流
public class DemoLient { public static void main(String[] args) throws IOException { //创建客户端Socket对象 后面跟自己的IP地址,和端口号 Socket socket = new Socket("127.0.0.1",8888); //客户端Socket通过输出getoutputStream获取一个输出流 OutputStream os = socket.getOutputStream(); //输出流向服务器大哥招呼,并同时字符串转字节数组 os.write("您好服务器!".getBytes()); //客户端socket通过InputStream输入流创建输入流 InputStream is = socket.getInputStream(); //创建数组让读取速度加快 byte[]bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); //释放资源 os.close(); socket.close(); } }
五。 ServerScoket 重点难点
5.1 ServerScoket构造方法
ServerSocket**(int port)` 绑定一个指定端口号 `ServerSocket(6666)`
5.2 成员方法 accept() 监听并且接受连接 用于客户端实现通信 阻塞直到建立连接
public class DemoServer { public static void main(String[] args) throws IOException { //创建ServerSocket服务端对象,固定端口号 ServerSocket se = new ServerSocket(8888); //ServerSocket对象调用accept监听方法 生成一个Socket对象 Socket accept = se.accept(); //利用Socket对象生成网络字节输入流 InputStream is = accept.getInputStream(); //利用本地输入流读取 byte[] bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); //利用网络字节输出流接收到客户端发送的内容之后,谢谢 OutputStream os = accept.getOutputStream(); os.write("谢谢,收到!".getBytes()); //释放资源 accept.close(); se.close(); } }
六。 案例 上传图片到服务器
文件上传服务器的原理
1 客户端使用本地字节流 读取本地文件
2 客户端使用网络字节输出流 把图片传到服务器上
3 服务器使用网络字节输入流 读取客户端上传的文件
4 服务器端使用本地字节输出流 把客户端的文件保存到服务器的硬盘上
5 服务器网络输出流 给客户端写传输成功
6 客户端使用网络的字节输入流 读取服务器回写“传输成功”
注意:客户端/服务器端和本地文件读写 必须用自己的创建流
客户端/服务器端之间的交互 用Socket中提供的网络流
客户端本地----》复制---》服务器
服务器----》复制----》服务器本地硬盘
必须清楚: 数据源 目的地