0

背景资料:

我有一个用 php 编写的页面,可以将数据发送到另一台服务器,如下所示:

$url = "example=data&to=show&the=format&im=using";
$client = stream_socket_client("<IP address and port>", $errno, $errorMessage);
fwrite($client, $url . "\n");

接收端的服务器使用 xinetd 启动执行实际处理的脚本。它的配置是这样的:

service b2b
{
    socket_type = stream
    protocol = tcp
    wait = no
    user = root
    server = /bbj/bin/bbj
    server_args = -c/samuel/config.daemon -q SS0B2R - system /tmp
    groups = yes
    disable = no
    per_source = UNLIMITED
    instances = UNLIMITED
    flags = NODELAY KEEPALIVE
}

问题:假设发生了某种灾难,例如有人拔出以太网电缆,脚本是否有可能只接收部分字符串?IE:example=data&to=sh

4

1 回答 1

0

这不是关于 xinetd,而是关于协议。

如果您使用 TCP 之类的stream_socket_client("tcp://www.example.com:80", $errno, ... everything is OK.

TCP 是一种可靠的流传输服务,可确保接收到的所有字节都与发送的字节相同,并且顺序正确。由于许多网络上的数据包传输不可靠,因此使用一种称为重传肯定确认的技术来保证数据包传输的可靠性。这种基本技术要求接收方在接收到数据时以确认消息进行响应。发送者记录它发送的每个数据包。发送方还维护一个从发送数据包时开始的计时器,如果在消息被确认之前计时器到期,则重新发送数据包。如果数据包丢失或损坏,则需要计时器

于 2014-12-03T23:37:46.290 回答