PHP 套接字类型和 TCP 窗口大小

标签 php sockets tcp mss

所以这实际上是一个两部分的问题,第一部分导致第二部分。

我正在从事一个 PHP 服务器项目,我对创建套接字的所有不同方式感到有点困惑。我设法创建了三个套接字,每个套接字都使用一种新方法。有谁知道这三种方法之间的根本区别吗?

方法一使用'socket_create'

$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
socket_bind($Socket1, $LocalIP, $LocalPort)
socket_connect($Socket1, $DestIP, $DestPort)
//Method 1 Read
socket_read($Socket1)
//Method 1 Write
socket_write($Socket1, $WriteMsg, strlen($WriteMsg))

方法二使用'fsockopen'

$Socket2 = fsockopen($Server, $Port)
//Method 2 Read
fgets($Socket2)
//Method 2 Write
fputs($Socket2, $PutMsg, strlen($PutMsg))

方法三使用'stream_socket_client'

$Socket3 = stream_socket_client('tcp://'.$DestIP.':'.$DestPort)
//Method 3 Read
stream_socket_recvfrom($Socket3, $RecSize)
//Method 3 Write
stream_socket_sendto($Socket3, $SendMsg)

虽然我不明白其中的区别,但我正在探索所有三个选项以寻找控制 TCP 窗口大小的方法。我正在尝试通过我的 LAN 将数据包推送到客户端,该数据包的数据有效负载为 1460 字节,在查看数据包捕获后,我的数据包的 TCP 数据部分总是被缩短为 1448 字节。有什么想法吗?

提前致谢!

最佳答案

您无法控制一次接收到的实际数据量。 TCP 是一种流式传输协议(protocol)。它向应用程序提供字节流 API。您只需要做好阅读和重新阅读的准备,直到获得您想要的内容。

关于PHP 套接字类型和 TCP 窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053323/

相关文章:

javascript - 在文件下载完成之前、同时或之后发送 JavaScript 警报

php - 如何找到在elasticsearch中找到的结果来自哪个子类型?

php - 64 位浮点字面量 PHP

python - 使用 urllib.request tinyupload.com 上传文件

c++ - 缓冲区溢出会发生什么?

java - PHP 对 Java 风格的类泛型有答案吗?

javascript - Socket.io channel 和消息回调

Java 客户端-服务器应用程序抛出 "java.net.SocketException: Connection reset"异常

c# - 如何使用 tcp 客户端显示当前的下载/上传速度?

networking - 应用层如何将ip地址传递给网络层?