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

devtools/2024/11/24 6:24:39/

文章目录

  • 第二十九章 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.ppmy.cn/devtools/136479.html

相关文章

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…

Linux安装RabbitMQ

安装步骤 rabbitmq使用erlang开发&#xff0c;依赖于erlang&#xff0c;所以需要先下载erlang&#xff0c;且版本要兼容&#xff1a; 可在官网查看erlang与rabbitmq的版本对应关系 https://www.rabbitmq.com/docs/which-erlangCentOs7安装运行 下载 下载地址 https://www.rab…

vue el-table表格点击某行触发事件操作栏点击和row-click冲突问题

文章为本新手菜鸡的问题记录&#xff0c;如有错误和不足还请大佬指正 文章目录 前言一、点击el-table表格某行&#xff0c;触发事件二、解决el-table的操作栏点击和row-click冲突问题1.问题&#xff1a;2.解决方法 前言 文章主要解决两个问题&#xff1a; 1、点击el-table表格…

【SQL Server】华中农业大学空间数据库实验报告 实验四 完整性约束

1.实验目的 通过理论课的学习与实验指导书的帮助&#xff0c;在实验课操作的基础上进一步理解数据库中&#xff0c;实现数据完整性的概念及实施数据完整性的重要性&#xff0c;同时掌握数据完整性的分类&#xff0c;体会数据完整性约束的作用&#xff0c;加深对数据完整性及其…

Selenium 使用指南:从基础到反爬虫的实践

掌握Selenium 文章目录 掌握Selenium复杂动态网页解决方案Selenium简介Selenium chromedriver 安装打开自动化浏览器初始化机器人访问url——browser.get(url)全屏打开网页——browser.maximize_window()关闭窗口——browser.close()指定selenium参数需要的库网页元素定位获取…

【通俗理解】ELBO(证据下界)——机器学习中的“情感纽带”

【通俗理解】ELBO&#xff08;证据下界&#xff09;——机器学习中的“情感纽带” 关键词提炼 #ELBO #证据下界 #变分推断 #机器学习 #潜变量模型 #KL散度 #期望 #对数似然 第一节&#xff1a;ELBO的类比与核心概念【尽可能通俗】 ELBO&#xff0c;即证据下界&#xff0c;在…

不同路径.

本节通过一个求不同路径的实例,再次巩固二维动态规划的基础. 问题描述: 一个机器人位于一个m*n网格的左上角,机器人每次只能向下或者向右移动一步.机器人试图到达网格的右下角,问总共有多少种不同的路径?mhen的值均不超过100. 动态规划算法思路解析: 首先理解题目.机器人每…

03-03、SpringCloud第三章,负载均衡Ribbon和Feign

SpringCloud从看不懂到放弃&#xff0c;第三章 一、Ribbon负载均衡Load Balance 思考 Ribbon、Nginx、Feign 三者有什么区别1、Ribbon简介 1&#xff09;、Ribbon是一套 【客户端】 的 【负载均衡】 工具2&#xff09;、负载均衡&#xff08;Load Balance&#xff09;分为 集…