day011-网络编程

1、 网络编程概述

 

1.1  网络编程三要素

地址、端口、协议

1.1.1 IP地址:网络中设备的唯一标识。

IPV4格式:xxx.xxx.xxx.xxx由四段数字组成,每一段数字由八位二进制数字组成,取值范围是0到255。

IPV6格式:使用16个字节表示一个ip地址

1.1.2 端口号:就是一个十进制的整数,取值范围0到65535

作用:每一个进程都会有一个端口号,用来唯一标识每一个进程。

注意:不要使用0到1024以下的端口号,因为1024以下的端口号是由系统保留使用的, 要使用1024以上的。

1.1.3协议:计算机与计算机之间通信的数据格式

小结:通过ip找主机,通过端口号找进程,通过协议确定如何传输数据。

1.2  InetAddress类

一个该类的对象就代表互联网的一个IP地址。

        public static InetAddress getLocalHost​()

获取本地主机IP地址

        public static InetAddress getByName​(String host)

        根据主机名或IP字符串,创建IP地址对象

public String getHostName​()

        获取此IP地址的主机名。

        public String getHostAddress​()

返回文本显示中的IP地址字符串。

2. UDP通信

       UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。

2.1 UDP : User Datagram Protocloè.用户数据包协议

       UDP协议的特点:

(a)   面向无连接的协议

(b)   只管发送,不确定对方是否收到

(c)    给予数据包发送:将数据以及来源,接收端IP地址和端口号信息封装到数据包发送

(d)   发送数据大小限制在64k以内

(e)   因为面向无连接,所以速度快,但是不可靠

       UDP协议的使用场景

(a)   即时通信(QQ,微信,陌陌,飞秋)

(b)   在线视频

(c)    在线语音电话

      

2.2 UDP协议相关的两个类

       DatagramPacket          数据包对象,用来封装要发送或要接收的数据,比喻为集装箱

       DatagramSocket          发送对象,用来发送或接受数据包,比喻为码头

       2.2.1 DatagramPacket

public DatagramPacket(byte[] buf, int length,  InetAddress address,  int port)

创建发送端数据包对象

buf - 分组数据。

length - 包长度,单位:字节

address - 目的地址。

port - 目的端口号。

        public DatagramPacket​(byte[] buf, int length)

           创建接受端数据包对象

2.2.2 DatagramSocket

              数据发送对象。此类表示用于发送和接收数据报数据包的套接字

DatagramSocket成员方法:

        void send(DatagramPacket p)    发送数据报包
        void received(DatagramPacet p) 接受数据包
        void close()                   关闭资源,释放端口号
 
 
 
3. TCP通信
    TCP协议是面向连接的通信协议,即在数据传输之前现在客户端和服务器端建立逻辑连接,然后再传输数据。
 

3.1 TCP: Transmission Control Protocloè 传输控制协议

    面向连接的协议

(a)   三次握手建立连接,形成数据传输通道

(b)   四次挥手断开连接

(c)    基于IO流进行数据传输

(d)   传输数据大小没有限制

(e)   因为是面向连接的,传输速度慢,但是可靠的协议

TCP协议的使用场景:

(a)   文件上传和下载

(b)   邮件发送

(c)    远程登录

3.2 TCP协议相关的两个类

              Socket                  一个Socket对象代表一个客户端程序

              ServerSocket         一个ServerSocket对象就代表一个服务器端程序

3.2.1 Socket

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通信的端点。

构造方法:Socket(String host, int port)

                     根据主机名或IP地址和端口号创建Socket对象

              一旦执行,就会立即连接指定的服务器指定的端口,如果连接失败,就会抛出异常

              如果没有抛出异常,就代表建立连接成功

              Socket类常用方法:

              InputStream getInputStream()            返回此套接字的输入流

              OutputStream getOutputStream()      返回此套接字的输出流

              void close()                                       关闭套接字

              void shutdownOutput                       禁用此套接字的输出流

3.3 ServerSocket

              这个套接字实现了服务器套接字,该对象等待通过网络请求。   

              构造方法: ServerSocket(int port)

       3.3.1 ServerSocket成员方法

Socket accept()

等待并接受客户端连接,获得与客户端相关连的Socket对象。该方法会一直阻塞直到建立连接

      

3.4 TCP通信步骤

3.4.1客户端实现步骤

              (a) 创建Socket对象并关连服务器地址和端口号

              (b) 调用Socket对象的getOutputStream方法获得字节输出流对象

              (c) 调用字节输出流对象的write方法输出数据到服务器端

              (d) 调用Socket对象的getInputStream 方法获得字节输入流对象

              (e) 调用字节输入流对象的read方法获取服务器端的数据

              (f) 调用socket对象的close方法断开连接

3.4.2 TCP服务端实现步骤

              (a) 创建ServerSecket对象并指定端口号

(b) 调用ServerSocket对象的accept方法等待客户端连接并获得对应的socket对象

              (c) 调用socket对象的getInputStream方法获得字节输入流对象

              (d) 调用字节输入流对象的read方法获取客户端输入数据

              (e) 调用Socket对象的getOutputstream方法获得字节输出流对象

              (f) 调用字节输出流对象的write方法输出数据到客户端

              (g) 调用socket对象的close方法断开连接

猜你喜欢

转载自www.cnblogs.com/gzyzhui/p/9180765.html