你的位置:
问答吧
-> PHP基础
-> 问题详情
请教,使用socket_read如何判断读取的字符串到了换行处
在使用socket_read的时候,遇到了问题,不能读到换行处重置buf
例如:
客户端有两个紧连的socket_write进行不同的数据写入,服务器端在使用socket_read时,会一起读过来,这时两个不相关的数据被合并到同一个buf中。
除了切分字符串外,socket是否还有别的办法 reading stops at \n or \r。:confused:
CODE:
[Copy to clipboard]
//这个代码不行,PHP_NORMAL_READ - reading stops at n or r. (Default in PHP <= 4.0.6)
$buf = socket_read($socket, 1024, PHP_NORMAL_READ);
?>上面的代码不行。
大家多指教呀,谢谢了。
作者: Drifter
发布时间: 2005-08-25
关注
作者: Drifter
发布时间: 2005-08-25
PHP_NORMAL_READ - reading stops at \n or \r.
作者: 唠叨
发布时间: 2005-08-25
唠叨兄,不行呀
我用手册中的写法,一读取就报错。
$buf = socket_read($socket, 1024, PHP_NORMAL_READ);
php页面中报:
Warning: socket_read() expects parameter 1 to be resource, null given in test.php line 74
命令行中报:
unable to read from socket[0]
是否我写错了,或者有其他的写法?请多指教。
我的环境是php5
手册中写 PHP_NORMAL_READ (Default in PHP <= 4.0.6) 是否低于4.0.6版本的才能使用这个参数?
现在基本上没有哪个及其用低于这个版本的php了呀
我想php一定有其他的办法可以实现这个功能的,php.net、手册、google我都详细查过了,没有找。
大家帮忙呀
作者: Drifter
发布时间: 2005-08-26
echo PHP_NORMAL_READ; //1
echo PHP_BINARY_READ; //2
你给出的提示信息是
Warning: socket_read() expects parameter 1 to be resource, null given in test.php line 74
第一个参数无效,即$socket无效!
手册中写 PHP_NORMAL_READ (Default in PHP <= 4.0.6)
是说php4.0.6及以下默认值为PHP_NORMAL_READ
而php4.1.0及以上的默认值是PHP_BINARY_READ
最好贴出完整的测试代码,做为讨论的基础
作者: 唠叨
发布时间: 2005-08-26
多谢唠叨兄,我明白了
呵呵,困扰几天的问题,我再试一下
另外 unable to read from socket[0]
是什么意思?:rolleyes:
作者: Drifter
发布时间: 2005-08-26
还是不行,socket_read的问题,我直接把手册上的改为最简单的形式,在命令行运行以及页面中运行,都报读取错误,代码如下:
CODE:
[Copy to clipboard]
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = '127.0.0.1';
$port = 10000;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
echo "socket_create() failed: reason: " . socket_strerror($sock) . "n";
}
if (($ret = socket_bind($sock, $address, $port))
echo "socket_bind() failed: reason: " . socket_strerror($ret) . "n";
}
if (($ret = socket_listen($sock, 5))
echo "socket_listen() failed: reason: " . socket_strerror($ret) . "n";
}
$buf = socket_read($sock, 1024, PHP_NORMAL_READ);
if (false === $buf)
{
echo "socket_read() failed: reason: " . socket_strerror($ret) . "|". socket_last_error()."n";
}
socket_close($sock);
?>
作者: Drifter
发布时间: 2005-08-26
up
作者: Drifter
发布时间: 2005-08-26