За последние 24 часа нас посетили 69606 программистов и 6730 роботов. Сейчас ищут 2104 программиста ...

Работа с socket ???

Тема в разделе "PHP для новичков", создана пользователем serv2, 6 апр 2018.

  1. serv2

    serv2 Новичок

    С нами с:
    14 фев 2017
    Сообщения:
    10
    Симпатии:
    1
    Сделал опрос одной железяки по tcp\ip:

    Код (Text):
    1. <?php
    2.  
    3.  
    4. $service_port = "7108";
    5.  
    6. $address = "192.168.10.150";
    7.  
    8. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    9.  
    10. $result = socket_connect($socket, $address, $service_port);
    11.  
    12. $out = socket_read($socket, 240);
    13.  
    14. echo $out;
    15.  
    16.  
    17.  
    18. socket_close($socket);
    19.  
    20. ?>
    Все работает, но информация поступает не всегда в нужной последовательности, если скрипт запустить пару раз, то все встает на свои места.
    Вот так бывает, но со сдвигом:
    12 C0U07=2,12 C0U09=2,12 C0U12=2,12 C0U13=2,12 C0U14=2,11 C0U16=2,12 C0U17=2,11 C0U19=2,12 St=00on Cls=12 Uakb=25,7 MedU=2,11 C0U01=2,12 C0U04=2,12 C0U05=2,12 C0U06=2,
    Вот так правильно, если пару раз перезапустить:
    St=00on Cls=12 Uakb=25,7 MedU=2,11 C0U01=2,12 C0U04=2,12 C0U05=2,12 C0U06=2,12 C0U07=2,12 C0U09=2,12 C0U12=2,12 C0U13=2,12 C0U14=2,11 C0U16=2,12 C0U17=2,11 C0U19=2,12

    Как сделать проверку и перезапустить чтение?
    Вижу пока, как вариант, проверять наличие в начале строки символов "St=".
     
  2. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Походу проблема в 240, длину попробуй вообще убрать
     
  3. serv2

    serv2 Новичок

    С нами с:
    14 фев 2017
    Сообщения:
    10
    Симпатии:
    1
    Можно, но железка точно шлет 240, дальше еще хуже.
     
  4. serv2

    serv2 Новичок

    С нами с:
    14 фев 2017
    Сообщения:
    10
    Симпатии:
    1
    Сделал так, почистил через "trim" и по условию "goto" отправляю на повторное чтение как в "бэйсике"
    получаю что нужно.
    No No No Ok St=00on Cls=12 Uakb=25,6 MedU=2,11 C0U01=2,11 C0U04=2,11 C0U05=2,11 C0U06=2,11 C0U07=2,11 C0U09=2,11 C0U12=2,11 C0U13=2,11 C0U14=2,10 C0U16=2,11 C0U17=2,10 C0U19=2,11

    Вопрос, как почистить все строку?
     
  5. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    849
    Симпатии:
    199
    Адрес:
    Санкт-Петербург
    str_replace()
     
  6. serv2

    serv2 Новичок

    С нами с:
    14 фев 2017
    Сообщения:
    10
    Симпатии:
    1
    Спасибо помогло.
    NoNoOkSt=00on,Cls=12,Uakb=25.4,MedU=2.09,C0U01=2.10,C0U04=2.10,C0U05=2.09,C0U06=2.11,C0U07=2.10,C0U09=2.10,C0U12=2.10,C0U13=2.10,C0U14=2.09,C0U16=2.09,C0U17=2.09,C0U19=2.10
     
  7. serv2

    serv2 Новичок

    С нами с:
    14 фев 2017
    Сообщения:
    10
    Симпатии:
    1
    OkSt=80on,Cls=12,Uakb=27.2,MedU=2.24,C0U01=2.26n,C0U04=2.28n,C0U05=2.25n,C0U06=2.21,C0U07=2.21,C0U09=2.20,C0U12=2.21,C0U13=2.26n,C0U14=2.27n,C0U16=2.27n,C0U17=2.23,C0U19=2.27n
    Как дополнительно можно на каждую переменную C0U01 создать дополнительно C0U01n и присвоить 1, если есть признак "n" или 0 если нет признака "n".