Jump to content


Photo

Socket


  • Faça o login para participar
2 replies to this topic

#1 goiaba2000

goiaba2000

    Tô com sono!

  • Usuários
  • 1118 posts
  • Sexo:Não informado
  • Localidade:Sobradinho-DF

Posted 01/02/2006, 11:05

to tentando abrir um socket... inicialmente tentando fazer um chat...

no servidor local funciona qe é uma beleza, mas no servidor a telnet não connecta e o php retorna erro. acho que a porta não está sendo aberta...

to usando o seguinte no servidor:
#!/usr/bin/php -q

<?php
class Socket{
	var $Endereco;
	var $Porta;
	var $SockMaster;
	
	function Socket($Endereco = 'localhost', $Porta = 8888){
  error_reporting(E_ALL);
  set_time_limit(0);
  ob_implicit_flush();
  
  $this->Endereco	= $Endereco;
  $this->Porta	= $Porta;

  if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
 	 echo "ERRO socket_create() : " . socket_strerror($master) . "\n";
  }
  
  socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1); 
  
  if (($ret = socket_bind($master, $Endereco, $Porta)) < 0) {
 	 echo "ERRO socket_bind() : " . socket_strerror($ret) . "\n";
  }
  
  if (($ret = socket_listen($master, 5)) < 0) {
 	 echo "ERRO socket_listen() : " . socket_strerror($ret) . "\n";
  }
  
  $this->SockMaster	= $master;
	}

	function HandleClient($allclient, $socket, $buf, $bytes) {
  foreach($allclient as $client) {
 	 socket_write($client, $socket.": ".$buf);
  }
	}
	
	function HandleServer($allclient, $socket, $buf, $bytes){
  foreach($allclient as $client) {
 	 echo ($socket.": ".$buf."<br>");
  }
	}
	
	function Ativa(){
  $master	= $this->SockMaster;
	
  $read_sockets	= array($master);
  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);
   	 }
    }
    else{
   	 $bytes	= socket_recv($socket, $buffer, 2048, 0);
   	 if ($bytes == 0) {
      $index	= array_search($socket, $read_sockets);
      unset($read_sockets[$index]);
      socket_close($socket);
   	 }
   	 else{
      $allclients	= $read_sockets;
      array_shift($allclients);    // remove master
      $this->HandleClient($allclients, $socket, $buffer, $bytes);
      $this->HandleServer($allclients, $socket, $buffer, $bytes);
      
   	 }// else
    }// else
 	 }// foreach
  }// while
	}// function
}// class

$Socket	= new Socket("localhost",150);
$Socket->Ativa();

?>

PHP + UML + OO + Flash + MySQL = IMBATIVEL

http://www.guilardi.com.br
- portifólio
http://www.deusehmais.com.br
- projeto atual

#2 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 01/02/2006, 11:15

da alguma mensagem de erro?
a porta 150 pode ser usada no seu servidor?(pergunte ao suporte)

vc precisa de socket mesmo? tipo, vc esta conectando no proprio servidor, hehehe... a nao ser que vc queira aprender a utilizar, aí é outra coisa

socket é mais usado pra transmitir strings de um servidor pra outro(ou de um cliente remoto prum servidor)

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#3 gonacts

gonacts

    "Agora eu tb tenho um Tux..." =D

  • Usuários
  • 1030 posts
  • Sexo:Não informado

Posted 01/02/2006, 14:12

sem querer saber demais, como será esse chat ai?! :rolleyes:
"Ninguém é tão inteligente que não possa aprender e ninguém é tão burro que não possa ensinar.."
"As dúvidas engrandecem nossa sabedoria, mas não basta somente tirá-las, temos que entendê-las"




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq