PHP:如何从套接字读取N个字节?

时间:2015-06-16 18:22:24

标签: php sockets stream

我想打开socket并读取前6个字节。

$data = stream_socket_recvfrom($stream, 6);

但是如果客户端发送空字节,则函数只读取数据的第一部分并停止读取。

{0x51, 0x01, 0x00, 0x11, 0x11, 0x11}

我只得到{0x51, 0x01}

在这种情况下如何读取所有6个字节?

谢谢

1 个答案:

答案 0 :(得分:0)

抱歉,PHP中没有问题。 C ++上的客户端计算消息长度不正确:

std::ofstream outfile (collector,std::ofstream::binary);
char buffer[MAX];
int bytesread; //how much data was read? recv will return -1 on error                        

while(size)
{                                //collect bytes
    bytesread = recv(sock_CONNECTION,buffer,MAX>size?size:MAX,0);
    // MAX>size?size:MAX is like a compact if-else: if (MAX>size){size}else{MAX}
    if (bytesread < 0)
    {
         //handle error.
    }
    outfile.write (buffer,bytesread); 
    size -= bytesread;     //decrease
    std::cout<<"Transferring.."<<std::endl;
}

C ++的strlen在空字节上中断。