Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php socket_read()只返回头,不返回实际响应_Php_Sockets - Fatal编程技术网

Php socket_read()只返回头,不返回实际响应

Php socket_read()只返回头,不返回实际响应,php,sockets,Php,Sockets,我在跑步 $data = socket_read($socket, 2048, PHP_BINARY_READ); 应该返回如下字符串 // $data == ' 1840 kg G 008765 A ' 但它却回来了 Original response: HTTP/1.1 200 OK Date: Wed, 19 Feb 2003 09:00:00 GMT Server: MoxaHttp/1.0 Pragma: no-cache Cache-Control: no-cache Conte

我在跑步

$data = socket_read($socket, 2048, PHP_BINARY_READ);
应该返回如下字符串

// $data == ' 1840 kg G 008765 A '
但它却回来了

Original response: HTTP/1.1 200 OK
Date: Wed, 19 Feb 2003 09:00:00 GMT
Server: MoxaHttp/1.0
Pragma: no-cache
Cache-Control: no-cache
Content-type: text/html
Content-length: 450
看起来像是返回的数据的标题

socket_send配置正确,我们有其他具有相同设置的客户端,它们返回正确的值

你能告诉我是什么问题吗?为什么我没有收到预期的字符串

更新:

我多次重复socket_read()以读取完整字符串,它是:

Original response: HTTP/1.1 200 OK
Date: Wed, 19 Feb 2003 09:00:00 GMT
Server: MoxaHttp/1.0
Pragma: no-cache
Cache-Control: no-cache
Content-type: text/html
Content-length: 450
Set-Cookie: ChallID=1656
<HTML><HEAD><TITLE>NPort Web Console</TITLE></HEAD> <FRAMESET rows=57,1* frameborder=NO> <FRAME name=top scrolling=NO target=contents src=top.htm noresize> <FRAMESET cols=200,*> <FRAME name=contents target=main src=contents.htm> <FRAME name=main src=main.htm marginwidth=0 marginheight=0 scrolling=auto> </FRAMESET> <NOFRAMES><BODY background=bg.gif><P>This page uses frame, but your browser doesn't support.</P></BODY> </NOFRAMES> </FRAMESET></HTML>
原始响应:HTTP/1.1200正常
日期:2003年2月19日星期三09:00:00 GMT
服务器:MoxaHttp/1.0
Pragma:没有缓存
缓存控制:没有缓存
内容类型:text/html
内容长度:450
设置Cookie:ChallID=1656
NPort Web Console

此页面使用框架,但您的浏览器不支持。

所以看起来它返回了一些不同的东西,这些东西应该被其他程序读取。

你试过了吗?:

echo "Reading response:\n\n";
$buf = 'This is my buffer.';
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);

如果我错了,请纠正我:您是否正在尝试连接到特定主机,发送请求并期望得到答复?我之所以问这个问题,是因为您在问题中没有包括初始化
$socket
的部分。@Fin是的,好的。初始化是常规的-$socket=socket\u create(AF\u INET、SOCK\u STREAM、SOL\u TCP);套接字连接($socket、$host、$port);套接字发送($socket,chr(005),strLen(chr(005)),0);因此,如果我理解正确,不同机器上的相同代码(但只有一台)只从一台主机返回相同的结果。那台出现问题的机器上的网络配置如何?是否可以进行不同的配置?或者可能是路由器/防火墙阻止了某些东西?@Fin是的,所有其他机器都工作正常,也许它们的配置不同,我只是想知道问题是从什么地方来的,是我的PHP代码还是设备端的东西。这是你在读取套接字之前发送给服务器的东西。您发送的请求格式不正确,或者发送到错误的URL。或者,服务可能希望请求中存在特定的用户代理。