大家好,如果已经被问到,那么你们不要用虚拟枪射击我,但是,这里有。
我是一个ip / port的socket_send我看到服务器收到并回复数据。我的代码收到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个字节。关闭插座......好的。
答案 0 :(得分:0)
首先,你可以使用cURL而不是发送标题!只是一个假。
其次,确切地确定它是什么类型的内容会很棘手......服务器是否返回任何类型的“内容类型”?如果是这样,您可以阅读。
然后,您可以使用$ buf,然后尝试使用XML库来解析字符串(例如PHP的SimpleXML库)。
例如,如果它不解析XML,那么您知道它是常规字符串或其他内容。
cURL应该返回内容类型。
答案 1 :(得分:0)
如果有任何其他人在socket_close($ socket)之后的socket中遇到这个问题;我添加了echo html_entity_decode($ buf);