Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel o rei

socket não funciona

Recommended Posts

#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();

$address = '74.55.80.69';
$port = 80;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

do {
if (($msgsock = socket_accept($sock)) === false) {
	echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
	break;
}
/* Send instructions. */
$msg = "\nWelcome to the PHP Test Server. \n" .
	"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));

do {
	if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
	echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
	break 2;
	}
	if (!$buf = trim($buf)) {
	continue;
	}
	if ($buf == 'quit') {
	break;
	}
	if ($buf == 'shutdown') {
	socket_close($msgsock);
	break 2;
	}
	$talkback = "PHP: You said '$buf'.\n";
	socket_write($msgsock, $talkback, strlen($talkback));
	echo "$buf\n";
} while (true);
socket_close($msgsock);
} while (true);

socket_close($sock);
?>

Apareceu isso

 

#!/usr/local/bin/php -q

Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta). in C:\xampp\xampp\htdocs\index.php on line 19

socket_bind() failed: reason: Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta).

Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: Foi fornecido um argumento inválido. in C:\xampp\xampp\htdocs\index.php on line 23

socket_listen() failed: reason: Foi fornecido um argumento inválido.

Warning: socket_accept() [function.socket-accept]: unable to accept incoming connection [0]: Foi fornecido um argumento inválido. in C:\xampp\xampp\htdocs\index.php on line 28

socket_accept() failed: reason: Foi fornecido um argumento inválido.

 

 

ALGUEM PODE ME AJUDAR?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@beraldo

eu tambem estou estudando socket , mais eu acho que nao e so a porta nao

meu code bateu certinho

 

socket_bind

Esta função deve ser usada na tomada antes socket_connect () .

 

aonde esta o socket_connect nesse code

<?php
error_reporting(E_ALL);

$porta = 8080;

//meu localhost
$endereco ='192.168.1.26';


//criando a conexao
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo " eita falhou na criacao do socket :(";


} else {
echo "socket criado com sucesso";

}


$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
   echo "falhou de novo";

} else {
echo "ok";

}

?>

http://www.php.net/manual/en/function.socket-bind.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://www.php.net/m...ts.examples.php

Este exemplo mostra uma simples troca de informações do servidor. Alterar as variáveis address e port para o conjunto da sua configuração e execução. Você deve então conectar o servidor com uma linha de comando similiar a: telnet 192.168.1.53 10000 (onde o endereço e a porta partem da sua configuração). Algo que você digitar então irá sair no lado do servidor, e mostrar isso para você. Para desconectar, digite 'quit'.

Como eu faço isso?

Pra que serve isso em baixo?

#!/usr/local/bin/php -q

Talvez seja essa a razão do problema. Pois o próprio exemplo do php não funciona. E nem eu fiz isso na linha de comando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que serve isso em baixo?

#!/usr/local/bin/php -q

Talvez seja essa a razão do problema. Pois o próprio exemplo do php não funciona. E nem eu fiz isso na linha de comando?

 

esse trecho torna o arquivo executáel, desde que tenha permissão de execução. Isso permite fazer:

 

./arquivo.php

 

Aí o shell chama automaticamente o interpretador PHP

 

Mas só funciona em Linux e Unix-Like. É essa sua plataforma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

então essa linha não fará diferença. remove-a e execute o programa na linha de comando: "php arquivo.php"

 

Porque na linha de comando?

 

Eu digitei telnet localhost 80 no prompt de comando e depois quando eu vi apareceu: Could not bind to socket

Acho que estou sendo perceguido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

que IP é esse que está em $address?

 

você conhece sistema cliente-servidor? tem que estudar isso, saber para que serve cada função.

 

O bind() é usado no servidor, que deve ser a máquina local. Então esse IP deve ser o IP da sua máquina local

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.