【问题标题】:socket_recv I want readable data not byte countsocket_recv 我想要可读的数据而不是字节数
【发布时间】:2020-11-13 00:50:10
【问题描述】:

大家好,如果已经问过,希望你们不要用虚拟枪射击我,但是,来吧。

我是 socket_send 到一个 ip/port 我看到服务器接收并返回数据响应。我的代码接收 xxxx 个字节。我想知道这些字节需要 IE: xml 字符串,以便我可以在我的应用程序中解析和使用数据。 cURL 在这种情况下不可行,因为服务器接收到标头并且根本不响应。

**Code:**
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}

echo "Attempting to connect to '$address' on port '$port'...";
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}

$in = $xml;
$out = '';

echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
socket_shutdown($socket, 1);
echo "Reading response:\n\n";
$buf = '';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);

echo $buf . "\n";
echo "OK.\n\n";
?>

回应:

TCP/IP 连接 好的。好的。正在尝试连接到端口 '9000' 上的 'xxx.xxx.xxx.xxx' ...好的。发送 HTTP HEAD 请求...好的。读取响应:从 socket_recv() 读取 1365 个字节。关闭插座...好的。

【问题讨论】:

  • 你的 $buf 变量应该包含货物

标签: php xml sockets human-readable


【解决方案1】:

首先,您可以使用 cURL 而不是发送标头!仅供参考。

其次,要准确确定它是什么类型的内容会很棘手......服务器是否返回任何类型的“内容类型”?如果是这样,您也许可以阅读。

之后,您可以使用 $buf 再尝试使用 XML 库来解析字符串(例如 PHP 的 SimpleXML 库)。

例如,如果它不解析 XML,那么您就知道它是常规字符串或其他内容。

但是,cURL 应该返回内容类型。

【讨论】:

  • 对不起我知道$buf 带货我现在怎么打印内容我看到刚刚Read 1365 Bytes OK 消息
  • 它正在返回: 我可以在提琴手中看到,但我如何解析甚至在屏幕上打印该数据?提前致谢!
【解决方案2】:

在疯狂的头痛和几次药物治疗之后,我发现了问题:1 行 OMG

如果其他人在使用套接字时遇到此问题,请在socket_close($socket) 之后添加echo html_entity_decode($buf)

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2023-03-20
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多