所以这实际上是一个两部分问题,第一部分导致第二部分。
我正在研究一个PHP服务器项目,我对创建套接字的所有不同方法感到困惑。我已经设法使用一种新方法创建了三个套接字。有人知道这三种方法之间的根本区别吗?
方法1使用'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))
方法2使用'fsockopen'
$Socket2 = fsockopen($Server, $Port)
//Method 2 Read
fgets($Socket2)
//Method 2 Write
fputs($Socket2, $PutMsg, strlen($PutMsg))
方法3使用'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字节。有什么想法吗?
提前致谢!
答案 0 :(得分:1)
您应该可以使用socket_set_option命令执行此操作(socket_get_option命令中记录了选项):
$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
// send window
socket_set_option($Socket1, SOL_SOCKET, SO_SNDBUF, 1460);
请务必在socket_create
之后立即拨打电话。如果您需要修改接收窗口:
socket_set_option($Socket1, SOL_SOCKET, SO_RCVBUF, 1460);
答案 1 :(得分:0)
您无法控制一次收到的实际数据量。 TCP是一种流媒体协议。它为应用程序提供了一个字节流API。你必须准备好阅读和重新阅读,直到你得到你想要的东西。