##网络编程

网络编程顾名思义需要一个网络,通过网络进行操作的编程,那么对于网络编程,一般面试的时候都会有什么样的问题呢?

  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中提供的网络流

    ​ 客户端本地----》复制---》服务器

​     服务器----》复制----》服务器本地硬盘

必须清楚: 数据源 目的地

猜你喜欢

转载自www.cnblogs.com/liurui-bk517/p/10939928.html