gpt4 book ai didi

php - PHP套接字标准输入附加到接收到的数据

转载 作者:行者123 更新时间:2023-12-03 11:56:00 24 4
gpt4 key购买 nike

我在PHP中使用套接字来创建基于命令行的简单聊天。它可以正常工作,但是有一个主要问题使它几乎无法使用。当聊天中有多个人并且一个人正在键入消息而另一个人正在发送消息时,键入该消息的人会将收到的消息附加到他们正在键入的内容之后。有没有办法解决?我正在使用标准输入和流选择。这是客户的一件作品:

$uin = fopen("php://stdin", "r");
while (true) {
$r = array($socket, $uin);
$w = NULL;
$e = NULL;

if (0 < stream_select($r, $w, $e, 0)) {
foreach ($r as $i => $fd) {
if ($fd == $uin) {
$text = (fgets($uin));
fwrite($socket, $text);
} else {
$text = fgets($socket);
print $text;
}
}
}
}

感谢所有帮助!谢谢!

最佳答案

每当$ socket中有完整的字符串等待时,该代码就会向stdout输出一条消息。

解决该问题的唯一方法是将文本放置到变量($ outtext)中,而不是打印它。然后,只要准备好阅读它(例如在写入输出套接字之前),就可以显示它。

$uin = fopen("php://stdin", "r");
while (true) {
$r = array($socket, $uin);
$w = NULL;
$e = NULL;
$outtext = '';

if (0 < stream_select($r, $w, $e, 0)) {
foreach ($r as $i => $fd) {
if ($fd == $uin) {
$text = (fgets($uin));
print $outtext;
$outtext = '';
fwrite($socket, $text);
} else {
$text = fgets($socket);
$outtext .= $text;
}
}
}
}

不利的一面是,当您按Enter键时,它将仅显示传入的文本。解决该问题的唯一方法是使用fgets()以外的方法。

我假设这只是一个实验-使用Node.js或类似程序进行事件驱动的编程对于此类事情要好得多。

关于php - PHP套接字标准输入附加到接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com