java 识别tcp中的换行_请教,使用socket_read如何判断读取的字符串到了换行处

在处理TCP连接时,遇到一个问题,当Java客户端连续发送两个socket_write的数据时,PHP服务器端使用socket_read无法正确判断换行。本文讨论了如何在PHP中使用socket_read来识别字符串中的换行符,以及遇到的PHP_NORMAL_READ参数可能导致的错误,并提供了相关代码示例进行讨论。
摘要由CSDN通过智能技术生成

你的位置:

问答吧

-> 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);

?>上面的代码不行。

f3d8876edcf497bbb9db3ce4fe4d9b3f.png

大家多指教呀,谢谢了。

作者: 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值