TCP-сервер (php) - PullRequest
       23

TCP-сервер (php)

0 голосов
/ 20 сентября 2009

У меня есть симулятор gps, который отправляет непрерывные данные о местоположении (строки nmea) через tcpip на 192.168.0.178:2323. Как получить эти данные с помощью сокета tcp и записать в БД (php & mysql)?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2009

Это загруженный вопрос. Сначала вам нужно прочитать данные. Затем вы должны поместить некоторую структуру в данные, чтобы они могли быть использованы. Нет ничего хорошего в том, чтобы просто копировать латы в базу данных. Вы, вероятно, хотите сохранить его как путевую точку или часть трека и т. Д.

Так что у меня нет ответа на вопрос БД. Вот часть программы PHP, которую я использую для чтения данных GPS с моего телефона, подключенного к маршрутизатору CradlePoint. Изменено с GoogleNav кода.

function read_gps() {
        set_time_limit(5);
        $fp = fsockopen ("192.168.0.1", 8080, $errno, $errstr, 30);
        if (!$fp) {
           die ("$errstr ($errno)");
        }
        $point=false;
        $status="";
        $fix=0;
        while (!$point) {
                $string=@fgets($fp, 4096);
                switch (substr($string,0,6)) {
                        case "\$GPRMC" :
                                list($sentence, $time, $status, $latitude, $NS, $longitude, $EW, $speed, $course, $date, $magvar, $magvarEW)= explode(",", trim($string));
                                $latd=convdec($latitude, $NS);
                                $lond=convdec($longitude, $EW);
                                break;
                        case "\$GPGGA" :
                                list($sentence, $time, $latitude, $NS, $longitude, $EW, $fix, $nbsat, $HDOP, $altitude,,,,,)= explode(",", trim($string));
                                $latd=convdec($latitude, $NS);
                                $lond=convdec($longitude, $EW);
                                break;
                        default :
                        break;
                }

                if ($status=="A" and $fix == 1){
                        $point=true;
                }
        }
        ...

?>
0 голосов
/ 20 сентября 2009

Начните здесь: PHP Sockets

Один из комментариев пользователя дает полезный пример реализации TFTP-клиента

<?php
  function tftp_fetch($host, $filename)
  {
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

    // create the request packet
    $packet = chr(0) . chr(1) . $filename . chr(0) . 'octet' . chr(0);
    // UDP is connectionless, so we just send on it.
    socket_sendto($socket, $packet, strlen($packet), 0x100, $host, 69);

    $buffer = '';
    $port = '';
    $ret = '';
    do
    {
      // $buffer and $port both come back with information for the ack
      // 516 = 4 bytes for the header + 512 bytes of data
      socket_recvfrom($socket, $buffer, 516, 0, $host, $port);

      // add the block number from the data packet to the ack packet
      $packet = chr(0) . chr(4) . substr($buffer, 2, 2);
      // send ack
      socket_sendto($socket, $packet, strlen($packet), 0, $host, $port);

      // append the data to the return variable
      // for large files this function should take a file handle as an arg
      $ret .= substr($buffer, 4);
    }
    while(strlen($buffer) == 516);  // the first non-full packet is the last.
    return $ret;
  }
?> 
...