Avatar billede tcru Nybegynder
25. maj 2010 - 20:04 Der er 4 kommentarer

Socket script!

Hey.
Mange af de kære eksperter har fået lavet et socket script til mig. Det virker - Men mit webhotel vil ikke aktivere socket ect. på serveren pga. sikkerhed.

Findes der en anden mulighed? Ex. fsocketopen() ?

Her er det der virker:

if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) == false) {
    echo "socket_create FAILED"; exit();
} echo "socket_create OK\n";
if(socket_connect($socket, $plcIP, $plcPort) == false) {
    echo "socket_connect FAILED"; exit();
} echo "socket_connect OK\n";
if(socket_write($socket, $plcQuery) == false) {
    echo "socket_write FAILED"; exit();
} echo "socket_write OK\n";
sleep(2);
if(socket_recv($socket, $plcAnswer, $plcAnswerMaxLength, 0) == false) {
    echo "socket_recv FAILED"; exit();
} echo "socket_recv OK\n\nAnswer from PLC:\n\n{$plcAnswer}";
sleep(2); //PLC'en skal lige vågne
socket_close($socket);

Kan det laves på en anden måde?

Hilsen Michael
Avatar billede intenz Novice
25. maj 2010 - 20:23 #1
Hvad skal du bruge det til?
Avatar billede tcru Nybegynder
25. maj 2010 - 20:34 #2
Jeg skal kommunikere med en PLC-styring.

Jeg skal sende en tråd til den og den svarer tilbage med nogle data.. Ligesom scriptet jeg postede
Avatar billede intenz Novice
25. maj 2010 - 21:54 #3
Her er et bud med fsockopen


if(!$fp = fsockopen($plcIP, $plcPort)) {
    echo "fsockopen FAILED";
    exit();
}
echo "fsockopen OK\n";

if(!fwrite($fp, $plcQuery)) {
    echo "fwrite FAILED";
    exit();
}
echo "fwrite OK\n";

sleep(2);

$plcAnswer = "";
while (!feof($fp)) {
    $plcAnswer .= fgets($fp, 128);
}

if (empty($plcAnswer)) {
    echo "fgets FAILED";
    exit();
}

echo "fgets OK\n\nAnswer from PLC:\n\n{$plcAnswer}";

sleep(2); //PLC'en skal lige vågne

fclose($fp);


Når den får svar tilbage med dette:

while (!feof($fp)) {
    $plcAnswer .= fgets($fp, 128);
}

fungerer det ikke som i din oprindelige kode, der skal laves noget mere arbejde i den hvis du vil have $plcAnswerMaxLength med. Herudover nævner manualen nogle ting man skal være opmærksom på ved brug af feof, som ikke er med heri:
http://dk.php.net/manual/en/function.feof.php

Om scriptet virker, har jeg ingen ide om :P
Avatar billede tcru Nybegynder
27. maj 2010 - 16:23 #4
Alt virker undtaget delen med fgets() .... ?

Den melder bare timeout
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester