Java Socket通信之TCP协议

      最后更新:2022-03-19 22:50:53 手机定位技术交流文章

      文章目录

          • 1.TCP模型
          • 二. 共同TCP Socket API
            • ServerSocket API
            • Socket API
        • 二. 利用TCP流流的方案拟订
          • 1.回显服务器
          • 2.多线程服务器
        • 三、TCP长期联系
        • 四、协议
          • 第一,你为什么需要讨价还价?
          • 二. VS 排卵/分配的序号/反序号
          • 3. 自定义协议

      遵循Java Sockets的UDP协议,再次!
      一. Java流电信模式

      1.TCP模型

      TCP的整个通信方法如下:
      服务器的任务:
      1 创建了服务器套件,并绑定了一个港口,以成为一个收听器(类似于关闭街头客人的中间线)。
      2ListenSocket 引用服务器套件的接受功能 。处理时,内核与代码相连。如果您收到客户端请求, 您可以使用该请求 。接受 () 返回套接字样本 。这叫做"clieent Socket"(像一个中间人, 在车站前介绍一位访客给一个妹妹)。她负责以下业务程序。来访者仍被该机构接走。如果您没有收到请求,请通知我们。它被封锁了 正在等待行动
      3 字节流对象是指使用客户端用户Socket的 " 输入流 " 和 " 输出流 " 方法读写字节。
      4 当客户中断时,服务器迅速关闭客户端套件;否则文件资源就会泄漏。
      客户端的任务:
      1 在提供服务器的 IP 地址和端口时创建 Socket 对象( 创建 TCP 连接, 由内核进行三次握手, 对用户没有意义 ) 。
      客户端 2 使用 Socket 对象 GetInputstream 和 Get Outputstream 连接服务器 。
      在这里插入图片描述
      在港口占用方面:
      通常情况下, 两个进程不能共享相同的端口号! 在 Linux 中, 这被称为叉路系统呼叫 。
      解决办法:如果程序A接管了港口而不需要运行,它可以关闭A,然后启动程序B,这需要约束港口;如果程序A必须运行,程序B的具有约束力的港口可以改为其他未使用的港口。

      二. 共同TCP Socket API

      ServerSocket API

      建立 TCP 服务器 Socket 的 API 是 ServerSocket 。
      构建服务器套件的方法 :

      方法 说明
      ServerSocket(int port) 此函数创建服务端流套接字,并将其连接到响应端口。

      方法服务器套件 :

      方法 说明
      Socket accept() 开始监听提供的端口( 受创建约束的端口), 如果客户端连接存在, 返回套接字对象; 否则, 它仍然被屏蔽 。 (用户代码电话同意建立与用户代码的连接 。)
      void close() 关闭此套接字( 否则文件会随着连接增长而溢出 ) 。

      Socket API

      客户 Socket 是 Socket 。如果您想这样做,您必须能够确定您想要完成的任务,或者必须从客户那里获得在服务中建立连接(接受方法)的请求。服务端套接字返回 。Socket, 无论它是客户还是服务提供者。在双方建立联系后,保存的对方端信息,也就是说,它被用来相互交换数据。
      记住 Socket 既用于服务器, 也用于客户端, 而 ServerSocket 只用于服务器 。
      套接字方法 :

      方法 说明
      Socket(String host, int post) 创建客户端流套接字并连接到 IP 和 端口 进程 。

      TCP 套接字: TCP 套接字是一个字节流,在进行指定的读写时,其行为与文档相似。

      方法 说明
      InetAddress getInetAddress() 返回连接到 Socket 的地址。
      InputStream getInputStream() 此软件包的输入流被返回 。
      OutputStream getOutputStream() 返回此软件包的输出流 。

      二. 利用TCP流流的方案拟订

      1.回显服务器

      服务器代码:

      客户端代码:

      2.多线程服务器

      上面的例子,只有这样,我们才能实现客户对服务器的沟通。如果不止一个客户同时提出请求,它将是多线的,而且将继续进一步。线索的产生和销毁需要利用资源。为了避免定期出现销毁线,我们还可以利用线索库来强化我们的代码
      服务器代码:

      改进:

      客户端代码:

      我们如何应对异常多的线条? (非常高分辨率! )
      1个线索,而不是1个一致、完成和分发
      2IO多常规再利用技术,完成和分发
      通过分配,增加3个硬件资源
      TCP 协议包装应用包括tcpdump(Linux)和电线Shark,这是一个跨平台图形工具。

      三、TCP长期联系

      虽然TCP传输数据,但首先必须确定连接,当连接关闭时,它决定连接是短的还是长的:
      短连接:当接收和返回数据时,该连接被关闭,导致短连接,换句话说,短连接只能传输一次并接收一次。
      长链路:不要断开连接;相反,保持连接,双方传送和接收的数据是长链路。长链路可以发送和多次接收。

      两者对比如下:
      1 建立和关闭连接所需的时间:每次请求建立短连接,都需要建立连接和关闭连接;长连接只需要先建立初始连接,然后可以立即提交请求和答复。通过创建连接,关闭连接也耗费时间;长期连接效率更高。
      2 主动发送请求不同:短连接通常是向服务发送请求的客户;长连接是发送请求的客户或服务提供商。
      在客户要求较少的情况下,如页面浏览,使用短连接,而在经常使用客户-服务通信的场合,如聊天室、实时游戏等,则使用长链接。
      基于 BIO 的扩展连接( 同步的 IO 屏蔽) 将继续使用系统资源。 这种消耗对于高要求的同步服务端系统是不可持续的。 事实上, 服务结束往往以 NIO 为基础( 长期连接可以通过同步的非阻塞 IO 来大大改善 ) 。

      四、协议

      第一,你为什么需要讨价还价?

      对客户应用程序和服务应用程序的要求和答复要求商定统一的数据格式:
      1 客户发送和服务解决请求必须使用相同的数据格式。
      对于两个服务端回报和客户解析响应,采用了相同的数据格式。
      要求和答复的形式可以相同或不同。
      决定共同数据格式的基本理由是使接收者能够确定在整个分析过程中如何解构数据的各个领域。
      可以使用众所周知的协议(使用良好的协议格式),如果你想商定数据格式,也可以使用自定义的协议。

      二. VS 排卵/分配的序号/反序号

      一般来说,发送终端程序、发送数据时的数据转换格式以及提供数据时的数据包装作业都用于网络数据传输。
      如果这是众所周知的协议, 它被称为掩护。
      这种操作也被称为在出现小人群协议(包括海关协议)时的顺序安排,它常常将目标转换成程序中指定的数据格式。
      收到数据时的数据转换格式,即收到数据时数据分辨率作业的数据转换格式:
      如果你采用众所周知的协议,它也被称为“分享”。
      这项行动也被称为对小人群协议(包括海关协议)的反顺序,通常取决于收到并转化为程序目标的数据的具体格式。

      3. 自定义协议

      在整个数据传输过程中,除联合民主党和TCP议定书外,还有应用级海关协议;就协议而言,重点必须放在如何理解这些协议上,这些协议往往是根据实地特点建立的:
      对于固定长度字段,可以根据长度协议商定4字节,例如,整数字段。
      对于不定长的字段:
      1 您可以在字段之间或在最后一个字段结束时达成协议,例如。换行、n 符号结束等等。
      2 为记录“数据”的长度,在字段“数据”本身增加一个长度字段;因此,共使用两个字段:
      " 数据 " 字段可能长也可能不长,必须通过 " 长度 " 字段来理解。
      " 长度 " 字段用于确定 " 数据 " 的长度,以加强 " 数据 " 字段的分辨率。

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

          热门文章

          文章分类