PHP接收发送到端口的数据

时间:2014-02-17 12:02:59

标签: php sockets

我有一个设备将数据发送到我本地计算机上的端口(现在,它将在以后访问某个站点)以下代码使用PHP从端口接收数据。我必须在URL中输入127.0.0.1/web/1.php(我的文件名)才能生效。当我最终上线时,这将是一个问题,每次收到我的数据时套接字也会关闭。我如何继续倾听,如果没有我在URL中输入php文件,php文件如何运行。

感谢任何建议,我有VB背景,PHP和网络对我来说很新!感谢

这是我目前的PHP

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 = '192.168.1.70'; $port = 10000;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; }

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }

if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }

do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }

    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;   
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";      $file=fopen("welcome.txt","a+") or exit("Unable to open file!");        fwrite($file, $talkback);       fclose($file);
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock); } while (true);

socket_close($sock);

1 个答案:

答案 0 :(得分:0)

你可以对脚本进行deamonise并从命令行运行 - 根据上面的Colins评论 - PHP可能不是最好的语言 - 但是当我完成它之前我还添加了一个监视器来观察和重新启动脚本,如果因任何原因停止运行。

如果您在Unix上运行,那么使脚本可执行,例如

chmod a+x <script name>

并添加

#!/usr/bin/php
<?php

脚本的开头将允许您从命令行执行它。

然后使用像Deamon Tools这样的包

http://cr.yp.to/daemontools.html

启动并监控脚本是否正在运行。