让我解释一下问题:我正在创建一个使用能够读取一些数据的传感器的系统,然后,每个传感器都必须将这些数据发送到服务器,该服务器将在页面上的新行中打印收到的每条消息。
Sensor.php
class Sensor extends Thread implements ISensor
{
....
public function readValue(){
$this->value = rand( -15 , 40 );
$this->timestamp = date('Y-m-d H:i:s');
}
public function run(){
$number = 0;
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Couldn't create socket");
$this->connectionResult = socket_connect($this->socket, $this->ip, (int)$this->port) or die("Couldn't connect to server");
while($number <= $this->requestNumber){
$number = $number + 1;
$this->readValue();
$this->sendData();
sleep($this->frequency);
}
socket_close($this->socket);
}
public function sendData(){
$input = $this->toString();
socket_write($this->socket, $input, strlen($input)) or die ("Impossible send message");
}
Server.php
set_time_limit (300);
$address = '127.0.0.1';
$port = 19000;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port) or die('Could not bind to address');
socket_listen($sock);
while (true) {
$client = socket_accept($sock);
while (0 != socket_recv($client, $message, 1024, 0))
{
echo $message . "<br>";
}
socket_close($client);
}
socket_close($sock);
预期的结果是,客户端可以连接到服务器并发送消息(这很好),而服务器只为收到的每条消息打印新行。
那部分起作用,我将用屏幕截图更好地解释(我实际上无法发布屏幕截图,如果您无法理解下面的文字说明问题,我将留下指向屏幕截图图像的链接)
第一个传感器继续发送所有消息,服务器正确打印它们,然后,当线程结束时,服务器仅输出从第二个第二个传感器接收的所有消息的整行,而第一个传感器仍在运行,然后像这应该。
是因为while循环?如果删除while循环,则服务器仅为每个传感器打印一条消息。
天涯尽头无女友