Jump to content

Socket connection (Incoming) not working


ratcateme

Recommended Posts

I am experimenting with php and listening on port's i got this script from http://www.php.net/manual/en/function.socket-select.php#56241

#!/usr/bin/php
<?php

$port = 9050;

// create a streaming socket, of type TCP/IP
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('ERROR 1');

// set the option to reuse the port
socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1) or die('ERROR 1');

// "bind" the socket to the address to "localhost", on port $port
// so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
socket_bind($sock, 0, $port) or die('ERROR 1');

// start listen for connections
socket_listen($sock) or die('ERROR 1');

// create a list of all the clients that will be connected to us..
// add the listening socket to this list
$clients = array($sock);
while (true) {

// create a copy, so $clients doesn't get modified by socket_select()
$read = $clients;

// get a list of all the clients that have data to be read from
// if there are no clients with data, go to next iteration
if (socket_select($read, $write = null, $except = null, 0) < 1)
	continue;

// check if there is a client trying to connect
if (in_array($sock, $read)) {
	// accept the client, and add him to the $clients array
	$clients[] = $newsock = socket_accept($sock);

	// send the client a welcome message
	socket_write($newsock, "no noobs, but ill make an exception \n" . "There are " . (count($clients) - 1) . " client(s) connected to the server\n");

	socket_getpeername($newsock, $ip);
	echo "New client connected: {$ip}\n";

	// remove the listening socket from the clients-with-data array
	$key = array_search($sock, $read);
	unset($read[$key]);
}

// loop through all the clients that have data to read from
foreach ($read as $read_sock) {
	// read until newline or 1024 bytes
	// socket_read while show errors when the client is disconnected, so silence the error messages
	$data = @socket_read($read_sock, 1024, PHP_NORMAL_READ);

	// check if the client is disconnected
	if ($data === false) {
		// remove client for $clients array
		$key = array_search($read_sock, $clients);
		unset($clients[$key]);
		echo "client disconnected.\n";
		// continue to the next client to read from, if any
		continue;
	}

	// trim off the trailing/beginning white spaces
	$data = trim($data);

	// check if there is any data after trimming off the spaces
	if (!empty($data)) {

		// send this to all the clients in the $clients array (except the first one, which is a listening socket)
		foreach ($clients as $send_sock) {

			// if its the listening sock or the client that we got the message from, go to the next one in the list
			if ($send_sock == $sock || $send_sock == $read_sock)
				continue;

			// write the message to the client -- add a newline character to the end of the message
			socket_write($send_sock, $data . "\n");

		} // end of broadcast foreach

	}

} // end of reading foreach
}

// close the listening socket
socket_close($sock);
?>

but when i telnet into this script nothing happens.

the script gets no errors i am using localhost to check it.

i don't want a chat script but i want to make this one work so i can use it to build something else.

 

Scott.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.