PHP写的网页通过socket客户端与一个c写的socket服务器端进行通信,我发现服务端发送的返回信息,PHP客户端socket每次read最多只能收到1448个字节.
$ret = socket_read($socket,2048, PHP_BINARY_READ);
我的服务器端发送了2048个字节的数据,但是客户端按照上面的语句也只能收到1448个字节.我必需要这样写:
$ret1 = socket_read($socket,2048, PHP_BINARY_READ);
$ret2 = socket_read($socket,2048, PHP_BINARY_READ);
$ret = $ret1.$ret2;
才能接收完全所有信息.
问题一:我怎样才能配置最大接收字节数超过1448的限制?
问题二:如果我的服务器发送的数据总是超过了客户端所能承受的一次性接收最大字节数,客户端怎样才能判断接收的数据已经完整而不用再执行socket_read的操作.
比如上面服务器发送的2048个字节的数据,我的客户端要接收两次,如果我多写一次接收:
$ret3 = socket_read($socket,2048, PHP_BINARY_READ);
由于服务器端已经没有数据传输了,结果客户端还在等待接收,于是就死在那里了执行不下去了,这个是我测试的结果.不知道大家是不是有这样的情况.
另外还要说明的是,c写的服务器端程序我只有数据结构接口,不能够改动服务器端的程序.
---------------------------------------------------------------
用fsocket_open打开用fread读的时候就是这样
这个完全是自动的,不用你去操心的
---------------------------------------------------------------
while ($ret1 = socket_read($socket,2048, PHP_BINARY_READ))
{
$ret2 .= $ret1;
}
socket_read() returns a zero length string ("") when there is no more data to read.
---------------------------------------------------------------
你的那个“c写的socket服务器端”可能没有按照规范书写
也就可能得不到预期的结束符:false或""