Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]funkcje socket w php
Forum PHP.pl > Forum > Przedszkole
ipso
Witam, czy da sie przez gniazdo przekazać do napisanego serwera informacje do jakiego hosta ma być odesłana wiadomość? Konkretnie: mamy klienta i serwer, klient przesyła informacje do serwera a ten do innego klienta wskazanego w informacji, narazie udało mi sie napisać tak że serwer odsyła informacje do tego samego klienta, a chce zeby wysylal do innego? Jak to zrobić, bo glowie sie juz od jakiegos czasu i szukałem w manualu ale jakoś zadna funkcja mi nie pasuje...

nizej kod serwera i klienta jakby ktos chcial zobaczyc, to ma byc komunikator, w lewym okienku wpisujemy, w prawym otrzymujemy wiadomosc, chodzi o to zeby np w polu "wyslij do" (albo zrobic jakas liste rowijana z kontaktami) dalo sie wpisac ip albo jakies id i do tego hosta wyslac wiadomosc

najpierw uruchamiamy plik serv.php
  1. <?php
  2.  
  3.  
  4.  
  5. $address = '127.0.0.1';
  6. $port = 10002;
  7. $max_clients = 10;
  8.  
  9.  
  10. $clients = Array();
  11.  
  12. $sock = socket_create(AF_INET, SOCK_STREAM, 0);
  13. socket_bind($sock, $address, $port) or die('Nie mozna polaczyc!');
  14. socket_listen($sock);
  15.  
  16. while (true) {
  17.  
  18.    $read[0] = $sock;
  19.    for ($i = 0; $i < $max_clients; $i++)
  20.    {
  21.        if ($client[$i]['sock']  != null)
  22.            $read[$i + 1] = $client[$i]['sock'] ;
  23.    }
  24.  
  25.   $ready = socket_select($read, $write = NULL, $except = NULL, $tv_sec = NULL);
  26.  
  27.    if (in_array($sock, $read)) {
  28.        for ($i = 0; $i < $max_clients; $i++)
  29.        {
  30.            if ($client[$i]['sock'] == null) {
  31.                $client[$i]['sock'] = socket_accept($sock);
  32.                break;
  33.            }
  34.            elseif ($i == $max_clients - 1)
  35.                print ("Za duzo klientow,sprobuj pozniej...");
  36.        }
  37.        if (--$ready <= 0)
  38.            continue;
  39.    }
  40.    
  41.  
  42.    for ($i = 0; $i < $max_clients; $i++)
  43.    {
  44.        if (in_array($client[$i]['sock'] , $read))
  45.        {
  46.            $input = socket_read($client[$i]['sock'] , 1024);
  47.            if ($input == null) {
  48.              
  49.                unset($client[$i]);
  50.            }
  51.            $n = trim($input);
  52.            if ($input == 'exit') {
  53.              
  54.                socket_close($client[$i]['sock']);
  55.            } elseif ($input) {
  56.            
  57.                $output = $input;
  58.    
  59.                socket_write($client[$i]['sock'],$output);
  60.  
  61.            }
  62.        } else {
  63.          
  64.            socket_close($client[$i]['sock']);
  65.            unset($client[$i]);
  66.        }
  67.    }
  68. }
  69.  
  70. socket_close($sock);
  71. ?>


plik cli.php wywolujemy z parametrem bo sie wysypie,np: http://localhost/cli.php?message=Witaj&Submit=Wyslij
  1. STATUS<br><textarea cols="22" rows="7">
  2. <?php
  3.  
  4.  
  5. $address = "127.0.0.1";
  6. $port = 10002;
  7.  
  8. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  9.    if ($socket === false) {
  10.    echo "Nie utworzono gniazda: " . socket_strerror(socket_last_error()) . "\n";
  11.    } else {
  12.    echo "Utworzono gniazdo\n";
  13.    }
  14.  
  15. echo "Łączy z: '$address' na porcie '$port'...\n";
  16. $result = socket_connect($socket, $address, $port);
  17.    if ($result === false) {
  18.    echo "Nie połączono: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
  19.    } else {
  20.    echo "Połączono z: '$address'.\n";
  21.    }
  22. ?>
  23. </textarea>
  24.  
  25.  
  26. <form action="cli.php" method="GET">
  27. <br><br><br>
  28. <center>
  29.  
  30. <textarea cols="30" rows="7" name ="message">
  31. </textarea>
  32.  
  33.  
  34. <?php
  35. {
  36. $i = $_GET['message'];
  37. socket_write($socket, $i, strlen($i));
  38. }
  39. ?>
  40.  
  41.  
  42. <textarea cols="30" rows="7">
  43. <?php
  44. {
  45. $input = socket_read($socket, 2048);
  46. echo "$input";
  47. }
  48. socket_close($socket);
  49. ?>
  50. </textarea>
  51. <br><br>
  52.  
  53. Wyślj do:<input type="text"><br><br>
  54. <input type="submit" name="Submit" value="Wyslij">
  55. <input type=reset name="Wyczysc"></center>


Z gory dzieki za kazda pomoc
Spawnm
Proszę dodać tagi.
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.