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

文章目录

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

记录的拼接

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

java 复制代码
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如何接收一条串联的记录。

java 复制代码
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命令。

相关推荐
zzc9217 分钟前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
鳄鱼杆1 小时前
服务器 | Centos 9 系统中,如何部署SpringBoot后端项目?
服务器·spring boot·centos
jingyucsdn2 小时前
网页端 VUE+C#/FastAPI获取客户端IP和hostname
网络协议·tcp/ip·fastapi
weixin_461259412 小时前
[C]C语言日志系统宏技巧解析
java·服务器·c语言
m0_637146932 小时前
C语言基础面试问答
运维·服务器
Clownseven3 小时前
SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
服务器·ssh·腾讯云
ricky_fan3 小时前
window下配置ssh免密登录服务器
运维·服务器·ssh
2401_858286113 小时前
OS11.【Linux】vim文本编辑器
linux·运维·服务器·编辑器·vim
朱包林3 小时前
day27-shell编程(自动化)
linux·运维·服务器·网络·shell脚本
layman05283 小时前
OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践
服务器·鸿蒙系统·openeuler