第二十九章 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命令。

相关推荐
tan77º2 分钟前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
小白爱电脑27 分钟前
光纤的最小弯曲半径是多少?
网络
szxinmai主板定制专家1 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
你不知道我是谁?1 小时前
负载均衡--四层、七层负载均衡的区别
运维·服务器·负载均衡
花落已飘2 小时前
多线程 vs 异步
linux·网络·系统架构
九丝城主2 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware
码出钞能力3 小时前
linux内核模块的查看
linux·运维·服务器
qq_171538854 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip
珹洺5 小时前
计算机网络:(七)网络层(上)网络层中重要的概念与网际协议 IP
网络·tcp/ip·计算机网络
小皮侠5 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github