当前位置: 首页 > article >正文

第二十九章 TCP 客户端 服务器通信 - 记录的拼接

文章目录

  • 第二十九章 TCP 客户端 服务器通信 - 记录的拼接
  • 记录的拼接
  • 多路复用 `TCP`设备
  • 正在关闭连接
    • 使用`CLOSE`命令断开连接

第二十九章 TCP 客户端 服务器通信 - 记录的拼接

记录的拼接

在某些情况下,TCP会将不同的记录连接在一起形成单个记录。如果客户端或服务器进程向一个由WRITE分隔的TCP端口发出一系列WRITE命令,则可能会发生串接!或用于刷新缓冲区的WRITE#命令,而不管读命令是否在连接的另一端等待。

Process A                            Process B
%SYS> USE "|TCP|41880" R A U 0 W A   %SYS> USE "|TCP|41880" WRITE "ONE",!,"TWO"
<RETURN>                             <RETURN>
ONE
%SYS> USE 41880 R A U 0 W A 
<RETURN>
TWO

第二个例子概述了在进程B完成将两条记录写入到TCP端口之后,当它发出读命令时,进程A如何接收一条串联的记录。

Process A                           Process B
.                                   %SYS> USE "|TCP|41880" WRITE "ONE",!,"TWO"
.                                   <RETURN>
ONE
%SYS> USE "/TCP/41880" R A U 0 W A 
<RETURN>
ONETWO

多路复用 TCP设备

类中的%SYSTEM.Socket提供了多路传输 TCP设备的方法。Fork()Select()方法允许让单个作业同时处理接受新连接和从连接的TCP设备读取数据。侦听的TCP设备收到连接后,在中使用Fork()打开以创建用于读取数据的新的TCP设备。原始侦听的TCP设备继续接受传入的连接。可以使用在的Select()来等待侦听和连接的TCP设备。当新连接到达或数据可用时,Select()将返回发出信号的设备名称。

可以使用Select()Publish()Export()Import()方法,使侦听器作业接受传入连接并将连接的设备传递给工作作业。此工作作业可以与远程客户端通信。

正在关闭连接

客户端或服务器端都可以结束TCP绑定连接。关闭连接的首选方法是客户端向TCP设备发出close命令。(或者,客户端可以发出HALT命令。)然后服务器应该向该设备发出另一个READ命令,并接收到<READ>错误,然后为TCP设备发出一个CLOSE命令。

这种顺序的原因是,根据TCP/IP标准,连接资源在CLOSE后保持两分钟,但仅用于“主动关闭器”——首先执行CLOSE的进程。因此,最好先关闭客户机,因为服务器的资源通常比客户机的资源更有限。

使用CLOSE命令断开连接

从客户端或服务器发出这样的CLOSE命令:

CLOSE "|TCP|devicenum"

如上所述,客户端最好先发出CLOSE命令。如果服务器首先发出CLOSE命令,客户端将收到<WRITE>错误,然后应该发出CLOSE命令。


http://www.kler.cn/a/407803.html

相关文章:

  • 一文详解使用java easyexcel导出文件的几种情况
  • Spring框架深度剖析:特性、安全与优化
  • 离散数学【关系】中的一些特殊关系
  • 19.QT程序简单的运行脚本
  • ssm面向品牌会员的在线商城小程序
  • Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
  • linux下i2c开发与框架源码分析
  • 如何利用java爬虫获得淘宝商品评论
  • 网络安全(骇客)—技术学习
  • 【案例分享】图表工具TeeChart在环境研究领域的数据可视化应用
  • vue前端下载某一区域为照片格式
  • leetcode - 1861. Rotating the Box
  • 后端接受大写参数(亲测能用)
  • Elasticsearch面试内容整理-安全与权限管理
  • 安卓InputDispatching Timeout ANR 流程
  • RocketMQ: 客户端使用指南
  • Canvas 前端艺术家
  • Ubuntu20.04 rk3588交叉编译opencv4.10
  • MySQL面试题补
  • DAY1 网络编程(TCP客户端服务器)
  • Spring Boot入门——Spring Boot项目的创建
  • SpringBoot 集成 html2Pdf
  • Qt不同类之间参数的传递
  • ubuntu 配置 多个 git 客户端 账户
  • Modern Effective C++:Item 6 auto推导若非己愿,使用显式类型初始化惯用法
  • PostgreSQL技术内幕19:逻辑备份工具pg_dump、pg_dumpall