打怪升级之小白的大数据之旅(二十八)<Java面向对象进阶之 络编程>

打怪升级之小白的大数据之旅(二十八)

Java面向对象进阶之 络编程

上次回顾

上一章对Java的多线程进行分享,了解的多线程,可以更好的为以后大数据打好底子,毕竟我们的数据量是很大的,本章节介绍一下Java的 络编程,了解 络编程也只是为了让我们更好地了解 络传输的原理;同时, 络编程的案例可以加深一下我们对多任务和IO知识点的印象,具体的,请看今日的内容

络编程

软件结构

手机已经是我们日常必不可少的一部分了,今天整章节就通过 络编程带大家了解我们手机软件是如何运行的

  • B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等

  • 它的特点是方便,我们只需要下载一个浏览器,即可通过域名进行访问,它并没有客户端的限制,但正因如此,它的安全性就会相对差一些(我们通常提到的 络爬虫,多数都是通过B/S端进行的)

  • 两种架构各有优势,但是无论哪种架构,都离不开 络的支持。 络编程,就是在一定的协议下,实现两台计算机的通信的程序

  • 这里说句个人理解,对于许多公司来说,他们会更加倾向于开发C/S端,首先C/S端可以制定属于自己的安全规则,其次,可以开发出更多的功能。最重要的一点就是数据

  • 大数据最重要的就是数据,如果只是B/S端,对于一个公司来说,产生价值远远不如自己开发C/S端将用户牢牢把握在自己的手里。因为可以根据自己的商业需求对APP进行埋点,就像淘宝等电商软件,他们通过埋点可以获取用户购买商品的习惯并针对性进行推荐(推荐系统是大数据的应用之一)

络通信协议

  • 这里提一下局域 和互联 的概念,局域 就是在一个区域内的计算机之间相互连接,比如在一个教室中,多台计算机连接后,我们就可以使用飞秋或者使用局域 打单机的CS(一不小心暴露的年纪)
  • 互联 可以理解为一个大的 络,它并不仅仅只是一个小的区域,通过宽带,光纤,连接到千家万户

TCP/IP协议

  • 络通信协议:通过计算机 络可以使多台计算机实现连接,位于同一个 络中的计算机在进行连接和通信时需要遵守一定的规则
  • 这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机 络中,这些连接和通信的规则被称为 络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
  • 四次挥手:TCP协议中,在发送数据结束后,释放连接时需要经过四次挥手。

    • 第一次挥手:客户端向服务器端提出结束连接,让服务器做最后的准备工作。此时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数据。
    • 第二次挥手:服务器接收到客户端释放连接的请求后,会将最后的数据发给客户端。并告知上层的应用进程不再接收数据。
    • 第三次挥手:服务器发送完数据后,会给客户端发送一个释放连接的 文。那么客户端接收后就知道可以正式释放连接了。
    • Socket

      • 通信的两端都要有Socket,,是两台机器间通信的端点。 络通信其实就是Socket间的通信。Socket可以分为:
        • stream socket:使用TCP提供可依赖的字节流服务
          • ServerSocket:此类实现TCP服务器套接字。服务器套接字等待请求通过 络传入。
          • Socket:此类实现客户端,是两台机器间通信的端点。
        • datagram socket:使用UDP提供“尽力而为”的数据 服务
            • 调用 ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求。
            • 调用 accept() :监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。
            • 调用 该Socket 类对象的 getOutputStream() 和 getInputStream () :获取输出流和输入流,开始 络数据的发送和接收。
            • 关闭Socket 对象:客户端访问结束,关闭通信套接字。

            2、客户端
            客户端Socket 的工作过程包含以下四个基本的步骤 :

            • 创建 Socket :根据指定服务端的 IP 地址或端口 构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。
            • 打开连接到 Socket 的输入/ 出流: 使用 getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流,进行数据传输
            • 按照一定的协议对 Socket 进行读/ 写操作:通过输入流读取服务器放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线路。
            • 关闭 Socket :断开客户端到服务器的连接,释放线路

            相关API

            ServerSocket类的构造方法:

            • :创建绑定到特定端口的服务器套接字。
              ServerSocket类的常用方法:
            • :侦听并接受到此套接字的连接。

            Socket类的常用构造方法:

            • :创建一个流套接字并将其连接到指定 IP 地址的指定端口 。
            • :创建一个流套接字并将其连接到指定主机上的指定端口 。

            Socket类的常用方法:

            • :返回此套接字的输入流,可以用于接收消息
            • :返回此套接字的输出流,可以用于发送消息
            • :此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。
            • :获取套接字绑定的本地地址。
            • :此套接字连接到的远程端口 ;如果尚未连接套接字,则返回 0。
            • :返回此套接字绑定到的本地端口。如果尚未绑定套接字,则返回 -1。
            • :关闭此套接字。套接字被关闭后,便不可在以后的 络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
            • :如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。
            • :禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。

            下面我来使用案例来演示客户端与服务器的通信

            • 单个客户端与服务器单次通信
            • 多个客户端与服务器之间的多次通信
            • 如果服务器端要“同时”处理多个客户端的请求,因此服务器端需要为每一个客户端单独分配一个线程来处理,否则无法实现“同时
            // 客户端import java.io.BufferedReader;import java.io.InputStream;import java.io

            声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

  • 上一篇 2021年3月22日
    下一篇 2021年3月22日

    相关推荐