Socket programming in PHP from localhot to live server - php

I want to use socket programming in php, Here i want to send response from local machine to live sever (ex. www.example.com).
In example.com i want to catch the response.
I tried lot of ways which are available on internet, but nothing usable for me.
Suppose...I want to use this technique for chat application.
I'm able to send and receive response from local to local and xyz live server to xyz live server....
Now i want to access this from local to xyz OR abc to xyz
//client.php
<form method="POST">
<input type="text" name="message">
<input type="submit">
</form>
<?php
if (isset($_POST['message']) && $_POST['message'] != ''){
/*
* PHP Sockets - How to create a sockets server/client
*/
//include the server.php script to start the server
//include_once('server.php');
$host = "192.186.246.136";
$port = 4096;
$message = $_POST['message'];
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result;
// close socket
socket_close($socket);
}
?>
//Server.php
<?php
// set ip and port
$host = "192.186.246.136";
$port = 4096;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
// bind socket to port
$result = socket_bind($socket, $host, $port);
// start listening for connections
$result = socket_listen($socket, 3);
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input."<br />";
// reverse client input and send back
$output = strrev($input) ."<br />";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>

Maybe workerman can help you.
It's a socket framework for php.
http://github.com/walkor/workerman
For example a simple chat server
File:Applications/SimpleChat/start.php
<?php
use Workerman\Worker;
$global_uid = 0;
$connections_array = array();
function handler_connection($connection)
{
global $connections_array, $global_uid;
$connection->uid = ++$global_uid;
$connections_array[$connection->uid] = $connection;
}
// send to all
function handle_message($connection, $data)
{
global $connections_array;
foreach($connections_array as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// clear
function handle_close($connection)
{
global $connections_array;
unset($connections_array[$connection->uid]);
}
// Websockt
$text_worker = new Worker("Text://0.0.0.0:2347");
// one process
$text_worker->count = 1;
$text_worker->onConnect = 'handler_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Then you can use telnet command to test .
telnet 127.0.0.1 2347
...

Related

How to run this PHP websocket as a background service in linux server

I got this two files chat.php and chat2.php, it works fine but i want to run it as a background service in linux server or something like that
chat.php
`<?php
$host = $_SERVER['SERVER_ADDR'];// set some variables
$port = 25003;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?> `
*
i run this code and i could transfer from my input form as long as the page is reloading the chat.php file get the POST string so i want to run it as a server service or something like that. Thanks.*
`<?php
// set some variables
$host = $_SERVER['SERVER_ADDR'];
$port = 25003;
$message = $_POST['message'];
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo '';
echo "Reply From Server :".$result;
// close socket
socket_close($socket);
?>`

php client server on web host cant bind

I want to Run a simple Client-Server socket PHP script on my web host.
But i don't know how to exactly specify IP address and port number to work.
I test then on my wammp with success, but wen i upload them on my host control panel and run, they are not works.
Here is my codes:
Client
<?php
$host = "105.24.123.188";
$port = 8080;
$message = "hello";
echo "Message To server: ".$message. "<br>";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
echo "After connect: ".$result. "<br>";
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server: ".$result. "<br>";
// close socket
socket_close($socket);
?>
Server
<?php
$host = "105.24.123.188";
$port = 8080;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");
if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo socket_strerror(socket_last_error($socket));
exit;
}
//echo "reached \n";
printf("this1\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
///echo "reached \n";
printf("this2\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message: ".$input. "<br>";
// reverse client input and send back
$output = strtoupper($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>
[Error]
Client
Message To server: hello
After connect: 1
Reply From Server: HTTP/1.1 400 Bad Request
Server
can't bind
I cant find out how to run my simple example on web server.
IP address and port checked they are valid and open.
I test this on local host under wammp server in windows successfully but how i can put them in online real web?
[?]
Is anyone face this issue when Run client, server scripts in web host?
Can you guys show me some working example similar.
How to obtain valid IP, Port to test them?
I get these ip from run ping www.myhost.com on windows, is it true?

Socket in php send receive messages through persistent connection

I have following scenario:
PHP persistent socket server made it run through console in infinite loop
It is my server.php and running it once by using ' php server.php ' command from command line.
<?php
// set some variables
$host = "127.0.0.1";
$port = 3000;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
while(true) {
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = strrev($input) . "\n";
echo socket_send($spawn, $output, strlen ($output), 0) or die("Could not write output\n");
// close sockets
}
socket_close($spawn);
socket_close($socket);
?>
Client.php here from this file I am sending message to socket server: At this point I am successful to send message to my socket server.
<?php
$host = "127.0.0.1";
$port = 3000;
$message = "Abhi ye sab kaise karen ahm asdasdasdasd";
//echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// get server response
//Send the message to the server
if( ! socket_send ( $socket , $message , strlen($message) , 0))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
} else {
echo "Message send successfully \n".$message;
}
//socket_close($socket);
?>
Receiver.php another file where I want to receive response my socket server is sending which is not working and Its keep on loading with out giving any out put.
<?php
$host = "127.0.0.1";
$port = 3000;
$message = "Abhi ye sab kaise karen ahm ";
//echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// get server response
//Send the message to the server
while(true){
$from = '';
$port = 3000;
echo socket_recvfrom($socket, $buf, 12, 0, $from, $port);
echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
}
//socket_close($socket);
?>
My receiver end is not receiving any out put. I am trying to do this way:
Send message from client to socket server and as soon as socket server dispatch it my receiver end display it, I am successful only up to client where I client.php sending message to server.php but receiver.php is not receiving any thing.
Thanks

how to implement socket connection on server?

I am initiator of socket programming. I am trying to implement the socket connection.
But I don't know which IP and port should I use for server.
The code I took from a link :
server.php:
<?php
// set some variables
$host = "<?>";
$port = 5555;
// don't timeout!
set_time_limit(0);
// create socket
//echo 'hello';
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo socket_strerror(socket_last_error($socket));
exit;
}
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
echo 'hello';
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
//$output = $_REQUEST['server_input'];
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>
- client.php
<?php
//include_once('server.php');
$host = "<?>";
$port = 5555;
$message = "hi from client";
//echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result;
// close socket
socket_close($socket);
?>
Description :
This function accepts incoming connection request on the created socket. After accepting the connection from client socket, this function returns another socket resource that is actually responsible for communication with the corresponding client socket. Here “$spawn” is that socket resource which is responsible for communication with client socket.
But I don't know which IP and port should I use for server.
The IP for use is same static IP set on your server's network, If you try to local test, Can use 127.0.0.1 for IP.
And also, for port, you can use one desired number between 1024 to 65535.
Note that, the IP and Port used on the server and client must be same.

keep socket server running on CentOS to listen to client request in php

I have a client and server program i do not have an idea of how to start the server automatically on my CENTOS server and the server should keep on running irrespective of my browser is closed, and it keeps on listening to client request. Please Help
Server.php
<?php
// set some variables
$host = "XX.XX.XXX.XX";
$port = 25763;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = strrev($input) . "\n";
echo $spawn;
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>
Client.php
<?php
// where is the socket server?
$host = "XX.XX.XXX.XX";
$port = 25763;
$message = "Hello Server This is the first message to the server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result;
// close socket
socket_close($socket);
// print result to browser
?>
Generally, you should start .php file with exec(), for example:
exec('/usr/bin/php /var/www/directory/server/event_server.php');
Next thing, put your socket_accept() (althoug, I used different scheme, with socket_select()) in infinite loop, and dont forget about delay - this is very important, as you don't want to hang your CPU:
$broadcast_start = microtime(true);
while(TRUE) {
socket_accept($socket);
//Do stuff...
if( round(microtime(true) - $broadcast_start, 1) < 0.5 ) {
usleep(500000);
}
}
But actually, your subbjects is really complex. You should first search the web for solutions, which are plenty.

Categories