我想实现一个聊天应用程序,其中php将充当服务器,android将充当客户端。
问题是,php脚本一直在加载,并且没有退出,我引入了一个循环来监听和输出从我的android emulator.But连续发送的消息,当我删除它一直加载的循环时,一旦我从我的android模拟器发送消息,它就输出一次,脚本stops.Now,我不知道如何实现这一点(即,每当我从android发送消息时,它会在页面上回显它们,并一直这样做,直到我发送退出消息,退出脚本)。
下面是我的php脚本:
set_time_limit (0);
$address = '10.116.27.107';
$port = 1234;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Could not bind to address');
socket_listen($sock);
while(1)
{
$client = socket_accept($sock);
$input = socket_read($client, 1024);
$output = preg_replace("[ \t\n\r]","",$input).chr(0);
socket_write($client, $output);
if($input=="exit")
break;
echo $input;
socket_close($client);
}
socket_close($sock);发布于 2012-06-29 20:14:56
为了实现一个聊天应用程序,你必须改进你的代码,使其能够处理多个连接,这比只读写一个客户端要复杂得多。从我的经验来看,从单用户系统到多用户系统是一个巨大的飞跃,这就是为什么学习如何通过反复试验来编写聊天系统需要时间。
然而,我相信这样做会帮助你避免你的问题,我猜这很可能是由于所谓的阻塞-系统在继续之前正在等待输入/输出,但是没有得到任何东西。
基本上,在使用聊天应用时,你需要考虑一些事情:
命令行,只是这不是我曾经尝试(或希望)做的事情。
socket_select()在用户评论中有一些如何使用它的简单示例,php总是需要知道客户端处于什么状态-即当你可以读的时候只读,当你可以写的时候才写……通常情况下,如果你可以读或写,那么你必须这样做,以保持平稳的工作(而不是最终冻结)-聊天应用程序是相当棘手的这个reason.fwrite()和fread()类似,您应该检查已写入了多少(如果未完成,则继续写入),并继续读取,直到在您的客户端上没有剩下任何东西可供终止某些系统期望消息以特定的终止字符结束/终止-即\n或\0。大多数聊天应用程序要么检测使用哪一个,要么将两者都作为每条谨慎消息的一部分发送。https://stackoverflow.com/questions/11260917
复制相似问题