网络编程之套接字

      最后更新:2022-07-17 18:47:00 手机定位技术交流文章

      目录

      为什么需要网络编程

      什么是网络编程

      传输层的两个重要协议

      索克是什么

      分类

      Java UDP协议

      Java使用TCP协议

      两个协议的对比

      为什么需要网络编程

      为什么网络编程? —— 丰富的网络资源
      用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,在网络上获取视频资源。类似于本地打开视频文件,只是这个资源的来源是网络。与当地资源相比,网络提供了更丰富的网络资源:

      所谓的网络资源 ,其实就是在网络中可以获取的各种数据资源。 而所有的网络资源,都是通过网络编程来进行数据传输的

      什么是网络编程

      什么是网络编程
      网络编程指网络上的主机,通过 不同的进程 ,以编程的方式实现 网络通信(或网络数据传输)
      • 当然,我们只要满足 进程 不同的同时;所以即使同一主机,只要它是一个不同的进程,基于网络传输数据,也属于网络编程。
      • 特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。 但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:
      • 进程 A 获取网络资源的编程
      • 进程 B 提供网络资源的编程
      • 一般意义上的网络通信从应用层的角度讨论,因此一般意义上的网络编程主要讨论在传输层

      传输层的两个重要协议

      1. UDP User Datagram Protocol 用户报文协议 UDP没有做任何处理,保存网络的原生态,是不可靠,无连接,面向数据报文的一种协议
      2. TCP Transmission Control Protocol 传输控制协议 可靠,有连接,面向字节流的一种协议
      3. 所有这些都是传输层协议,要求实现进程到进程的通信,所有这些都是应用层的视角

      网络层协议是IP协议

      如何设置网络(逻辑)通讯线

      发送端和接收端
      在网络数据传输中:
      • 发送端 :数据的 发送方进程 ,称为传送器。 发送端主是网络通信中的源主。
      • 接收端 :数据的 接收方进程 这个叫做接收机,接收机是网络通信中的目标主机。
      • 收发端 发射器和接收器的两端也称为接收器和发射器。
      注:发送者和接收者是相对的,只有一个网络数据传输产生数据流的观念。
      请求和响应
      一般来说,获取网络资源需要两个网络数据传输:
      • 首先:发送请求数据
      • 第二: 发送响应数据.

      客户端和服务端

      • 服务端 在一般网络数据传输场景下,使用 提供服务 另一方面, 称为服务端的进程可以提供外部服务.
      • 客户端 获取服务 另一方面, 这个过程被称为客户.

      对于服务来说

      • 一般提供:客户访问服务资源
      • 客户端在服务端存储资源
      好比在银行办事:
      • 银行提供存款服务:用户(客户)在银行(服务端)储存资源(现金)
      • 银行提供退款服务:客户(客户)获得服务终结资源(银行为客户持有的现金)

      索克是什么

      概念
      Socket 接口是基于网络通信系统提供的一种技术 TCP/IP 协议的网络通信的基本操作单元。 基于索克接口的网络程序的开发是网络编程

      分类

      流套接字 :使用传输层 TCP 协议
      1. 有连接
      2. 可靠传输
      3. 面向字节流
      4. 有接收缓冲器和发送缓冲器
      5. 大小不限
      对于节点流,很容易理解传输数据是基于 IO 流动数据的特点是: IO 如果流不是关闭,则它是无限的数据,可以多次发送,并且可以单独多次接收。
      数据报套接字 :使用传输层 UDP 协议
      1. 无连接
      2. 不可靠传输
      3. 面向数据报
      4. 接收缓冲区而不发送缓冲区
      限制大小:最大传输一次 64k
      对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如 100 一个字符串必须一次发送,一个接收必须一次接收 个字节,而不能分 100 次,每次接收 1 个字节
      Java数据报告包字符通信模型

      对于一次发送及接收 UDP 数据报的流程如下:

      为多个客户提供请求处理和响应,如下:

      Java UDP协议

      套接字的创建

      DatagramSocket 构造方法

      • UDP服务器使用固定端口来便利客户服务端口之间的通信,这可能会导致错误(端口已经被其他进程占用)
      • UDP客户端(Client),不需要采用固定端口(可以采用)
      DatagramSocket 一些常见的方法

      • 一旦在通信的两个方面具有逻辑意义的通信线,两个方面的地位是平等的(谁可以是接收者谁可以是发送者)
      • 通信结束后,都需要进进行资源回收
      • 对于接收方法,如果没有收到数据消息,则该过程总是被封锁

      数据报的创建

      • 数据消息是通信过程的数据抽象,被理解为在通信过程中发送/接收信封
      • 作为接收器,您只需要提供数据存储的位置
      • 作为发送者,您需要发送数据,并向谁发送数据(远程ip+端口)

      数据包类的方法

      • 为服务器使用,获取客户端IP和端口
      • 对于接收者:接收消息的内容,由另一进程发送的应用程序层数据

      例子

      Java使用TCP协议

      服务端端的接口建立

      • 连接(第一次通话,第一次通话) 未连接接收消息(没有大脑发送,不在对方的场合)
      • 因为TCP是有连接的,服务器使用TCP Socket(传入的端口就是要公开的端口,一般称为监听端口)

      服务端服务器接口方法

      • 服务器的Socket(客户端对象)是通过accept中获取来的,所以客户端Socket对象需要主机手动实例
      • 挂电话,谁都可以挂

      客户接口建立

      • 一旦接口对象被接收,双方都同时接收它(电话同时被切断),双方的状况是等的,仅通过分发发送者和/或接收者

      客户端接口方法

      • 获取对方的IP地址/getRemote()获取对方的端口
      • 输入流:位于过程角度,是一个输入流(对象后面是网络卡,由网络卡抽象的TCP连接),因此它用于接收器
      • 输出流:因此它用于发射器

      输入和输出流的使用

      由于它是基于节点流的,可以使用输入和输出流

      两个协议的对比

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29928.html

          热门文章

          文章分类