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
<?php
$address = '127.0.0.1';
$port = 10002;
$max_clients = 10;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind
($sock, $address, $port) or
die('Nie mozna polaczyc!');socket_listen($sock);
while (true) {
$read[0] = $sock;
for ($i = 0; $i < $max_clients; $i++)
{
if ($client[$i]['sock'] != null)
$read[$i + 1] = $client[$i]['sock'] ;
}
$ready = socket_select($read, $write = NULL, $except = NULL, $tv_sec = NULL);
for ($i = 0; $i < $max_clients; $i++)
{
if ($client[$i]['sock'] == null) {
$client[$i]['sock'] = socket_accept($sock);
break;
}
elseif ($i == $max_clients - 1)
print ("Za duzo klientow,sprobuj pozniej..."); }
if (--$ready <= 0)
continue;
}
for ($i = 0; $i < $max_clients; $i++)
{
if (in_array($client[$i]['sock'] , $read)) {
$input = socket_read($client[$i]['sock'] , 1024);
if ($input == null) {
}
if ($input == 'exit') {
socket_close($client[$i]['sock']);
} elseif ($input) {
$output = $input;
socket_write($client[$i]['sock'],$output);
}
} else {
socket_close($client[$i]['sock']);
}
}
}
socket_close($sock);
?>
plik cli.php wywolujemy z parametrem bo sie wysypie,np:
http://localhost/cli.php?message=Witaj&Submit=WyslijSTATUS<br><textarea cols="22" rows="7">
<?php
$address = "127.0.0.1";
$port = 10002;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Nie utworzono gniazda: " . socket_strerror
(socket_last_error
()) . "\n"; } else {
echo "Utworzono gniazdo\n"; }
echo "Łączy z: '$address' na porcie '$port'...\n"; $result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "Nie połączono: ($result) " . socket_strerror
(socket_last_error
($socket)) . "\n"; } else {
echo "Połączono z: '$address'.\n"; }
?>
</textarea>
<form action="cli.php" method="GET">
<br><br><br>
<center>
<textarea cols="30" rows="7" name ="message">
</textarea>
<?php
{
$i = $_GET['message'];
socket_write
($socket, $i, strlen($i));}
?>
<textarea cols="30" rows="7">
<?php
{
$input = socket_read($socket, 2048);
}
socket_close($socket);
?>
</textarea>
<br><br>
Wyślj do:<input type="text"><br><br>
<input type="submit" name="Submit" value="Wyslij">
<input type=reset name="Wyczysc"></center>
Z gory dzieki za kazda pomoc
Ten post edytował ipso 19.07.2009, 10:30:35