首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fread挂起- PHP

fread挂起- PHP
EN

Stack Overflow用户
提问于 2012-08-30 22:40:14
回答 1查看 1.7K关注 0票数 2

我使用fsockopen($host,$port)创建了一个套接字,使用fwrite发送数据,并尝试使用fread读取数据。似乎fsockopen成功创建了套接字,fwrite成功地将数据发送到套接字(返回正数- 4),但fread挂起。看起来它正在等待读取数据,但我不明白为什么..fwrite成功。我尝试使用socket_create、socket_connect、socket_send和socket_recv代替fwrite和fread,但是同样的事情发生了。

下面是我的代码摘要:

代码语言:javascript
复制
$socket = fsockopen($host,$port,$errno,$errstr);
if(!$socket){
     echo "$errstr ($errno)<br>";
}

...
$example; //string to send
fwrite($socket,pack("N",strlen($example)),4);
$result = fread($socket,4); <-- Hangs and eventually shuts down the server.
...

在fread之前,我几乎没有成功的发送/读取代码。

代码语言:javascript
复制
$status = stream_get_meta_data($socket);
var_dump($status);

这将输出以下数组:

代码语言:javascript
复制
array(7) { 
["stream_type"]=> string(14) "tcp_socket/ssl" 
["mode"]=> string(2) "r+" 
["unread_bytes"]=> int(0) 
["seekable"]=> bool(false) 
["timed_out"]=> bool(false) 
["blocked"]=> bool(true) 
["eof"]=> bool(false) } 

它已经困扰我很长时间了。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-31 01:39:21

如果您正在使用流函数进行套接字通信,您可能希望使用fflush()来确保您确实在网络上发送数据,否则这一短项可能只是位于流输出缓冲区中。

不过,对于socket_send()来说,这应该不是问题。既然你说结果是一样的,我建议你重新检查一下你使用的是哪种应用程序协议--另一方可能希望生成超过4个字节的响应。

最后的办法始终是像tcpdump(1)wireshark这样的数据包嗅探器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12199452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档