Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal estou implementando um chat com socket e, eu não sei o q q acontece que não consigo obter informações do socket
essa parte acho que tah funcionando
eu crio o socket e tal
/**
* Here is the socket communication initializiation
*/
if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0)
{
echo "socket_create() failed, reason: " . socket_strerror($master) . "\n";
}
socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);
if (($ret = socket_bind($master, $address, $port)) < 0)
{
echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n";
}
if (($ret = socket_listen($master, 5)) < 0)
{
echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n";
}
else
/**
* The socket is opened, so let start, the uptime counter, and write out
* some basic information to the log file.
*/
{
$started=time();
echo "[".date('Y-m-d H:i:s')."] SERVER CREATED ( MAXCONN:".SOMAXCONN." ) <br />";
echo "[".date('Y-m-d H:i:s')."] Listening on ".$address.":".$port."<br />";
}
retorna o seguinte
Warning: socket_bind() [function.socket-bind]: unable to bind address [13]: Permission denied in /usr/local/www/apache22/data/webtestes/rcampagnoli/Soket/phpsocketdaemon.php on line 250
[2009-09-11 09:28:48] SERVER CREATED ( MAXCONN:128 )
[2009-09-11 09:28:48] Listening on 192.168.10.251:80
acho que o erro acima pode estar influenciando em algo, mais pelo menos retorna que criou
o código na sequencia não retorna nada
while (true)
{
$changed_sockets = $read_sockets;
$num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
foreach($changed_sockets as $socket)
{
if ($socket == $master)
{
if (($client = socket_accept($master)) < 0)
{
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
continue;
}
else
{
array_push($read_sockets, $client);
echo "[".date('Y-m-d H:i:s')."] CONNECTED "."(".count($read_sockets)."/".SOMAXCONN.")\n";
}
}
else
{
$bytes = @socket_recv($socket, $buffer, 2048, 0);
/*
Here comes the core... ;)
*/
}
}
não era pra retornar essa linha?
echo "[".date('Y-m-d H:i:s')."] CONNECTED "."(".count($read_sockets)."/".SOMAXCONN.")\n";
a linha abaixo retornou
echo "sockets:<pre>"; print_r($changed_sockets); echo "</pre>";
Array
(
[0] => Resource id #2
)
depois
de passar pela linha
$num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
o array $changed_sockets passa a ser vazio, alguém consegue entender?
onde estou errando? ou é assim msm que funciona?
referencias
http://djz.hu/2007/07/26/php-socket-server-chat-gateway-for-flash-clients/
Carregando comentários...