【发布时间】:2016-06-17 23:09:14
【问题描述】:
我在跑步
$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>
所以看起来它返回了一些不同的东西,应该被其他程序读取。
【问题讨论】:
-
如果我错了,请纠正我:您是否尝试连接到特定主机、发送请求并期望得到答复?我问这个的原因是因为您初始化
$socket的部分不包含在您的问题中。 -
@Fin 是的,好的。初始化是常规的 - $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket, $host, $port); socket_send($socket, chr(005), strLen(chr(005)), 0);
-
因此,如果我理解正确,不同机器(但一台)上的相同代码仅从一台主机返回相同的结果。那台出现问题的机器上的网络配置怎么样?它可以配置不同吗?或者可能是阻止某些东西的路由器/防火墙?
-
@Fin 是的,所有其他机器工作正常,也许它们的配置不同,我只是好奇问题出在哪一部分,是我的 PHP 代码还是设备端的东西。
-
这是您在读取套接字之前发送到服务器的内容。您要么发送格式错误的请求,要么将其发送到错误的 URL。或者,服务可能希望请求中出现特定的用户代理。