Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odbieranie danych
Forum PHP.pl > Forum > Przedszkole
wojno
Witam

Mam urządzenie ktore wysyła za pomocą protokołu tcp pewne dane.

Czy da sie napisać skrypt ktory bedzie te dane odbierał i zapisywał w zmiennej.
Czytałem ze trzeba utworzyć gniazdo tcp ale nie wim czy jest to możliwe w php.

Proszę o pomoc,jakieś sugestie czym to ugryść.

Pozdrawiam
grzegorz_m
Nie do końca chyba wiadomo co chcesz zrobić.

Generalnie sprawa przesyłania danych przy zastosowaniu protokołu TCP/IP jest taka (dla architektury typu klient-serwer, a Ty chyba takiej oczekujesz):

Na jednym hoście stawiasz program Serwer, który oczekuje na wiadomości od programów typu klient.

W momencie, gdy uruchamiasz serwer otwierasz jednocześnie wybrany port -dzięki temu wiadomo, do której aplikacji mają zostać dostarczone dane. Kiedy Twój serwer oczekuje na wiadomości jakiś program klient wysyła wiadomości na adres, pod którym postawiłeś serwer i na port, na którym ten serwer oczekuje.


Pytanie jest: gdzie tak naprawdę chcesz wysyłać te dane przez swoje "urządzenie" (cokolwiek to słowo znaczy). Na zdalny serwer www? A może Twoje "urządzenie" może wykorzystywać protokół http? Wówczas możesz wykorzystać standardową metodę GET i przekazać te dane w adresie URL. Oczywiście to zależy od ilości danych. Tak czy inaczej lepiej dodaj coś więcej... 
wojno
Urządzenie wysyła dane na odpowiedni adres ip pod odpowiedzni port np 83.82.888.23 port 1000 i teraz chciałbym zeby na tym porcie czekał skrypt, cokolwiek przyjdzie bedzie zapysywane pliku, zmiennej lub bazy danych.
grzegorz_m
To co teraz napisałeś wynikało już z Twojej pierwszej wypowiedzi. Nie jest jednak jasne jaka to będzie architektura -np. gdzie chcesz to wysyłać. Powiem tak dla przykładu -czy możesz otworzyć jakiś port na hoście odbierającym (nie wiem darmowym/płatnym serwerze)? Czy administrator pozwoli na coś takiego?
wojno
Tak z tym nie bedzie problemow
grzemach
Cytat(wojno @ 16.12.2008, 00:06:28 ) *
Urządzenie wysyła dane na odpowiedni adres ip pod odpowiedzni port np 83.82.888.23 port 1000 i teraz chciałbym zeby na tym porcie czekał skrypt, cokolwiek przyjdzie bedzie zapysywane pliku, zmiennej lub bazy danych.

z tego co zrozumiałem skrypt miałby działać (i czekać) 24h/7dni. Jeśli to serwer dedykowany, to możesz coś takiego zrobić http://pl.php.net/fsockopen

Jeśli jest to serwer innego rodzaju (ktoś inny nim zarządza), maksymalny czas wykonania skryptu php jest przeważnie ustawiony na 30sek
wojno
Coś to nie działa w obu przypadkach.
erix
A my wróżymy z fusów? Bez kodu nic nie poradzi.
wojno
Znalazłem taki kod

Kod
<?php

// Set the ip and port we will listen on
$host = 82.98.222.99;
$port = 5000;

set_time_limit(0);

// create low level socket
if(!$socket=socket_create(AF_INET,SOCK_STREAM,0)){
    trigger_error('Error creating new socket',E_USER_ERROR);
}

# reuse socket tweak
  if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo socket_strerror(socket_last_error($socket));
    exit;
  }

// tie up socket to TCP port
if(!socket_bind($socket,$host,$port)){
    trigger_error('Error binding socket to TCP host:'.$host.', port:'.$port.'',E_USER_ERROR);
}

// begin listening connections
if(!socket_listen($socket)){
    trigger_error('Error listening socket connections',E_USER_ERROR);
}

// create communication socket
if(!$comSocket=socket_accept($socket)){
    trigger_error('Error creating communication socket',E_USER_ERROR);
}

// read socket input
$socketInput=socket_read($comSocket,1024);

//write data to file
echo $socketInput;
// close sockets
socket_close($comSocket);

socket_close($socket);
?>


Działa ładnie tylko po wysłaniu na niego danych konczy swoje działąnie. Jak zrobić zeby działał i czekał cały czas.
erix
Leń do potęgi n-tej. tongue.gif

http://pl.php.net/manual/en/ref.sockets.php#82163
wojno
A to teraz doradziłem nie ma co.
erix
Przecież masz tu rozpisaną całą aplikację... :|

Główna filozofia opiera się na tym, aby funkcja odbierająca dane działała w pętli, która wykonuje się bez przerwy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.