Обмен данными между двумя клиентами сокетов с использованием переполнения стека

Я разрабатываю новое приложение на основе сокетов для взаимодействия с моими клиентами, и я хочу добиться этого с помощью программирования сокетов.

Скажем так server socket работает на 127.0.0.1 на 8888 порт. когда клиент подключился к моему серверу & если он пытается отправить сообщение администратору, где администратор уже подключен с другого клиента сокета.

Но я столкнулся с проблемой обмена данными между администраторами & клиентские розетки. Однако сокет сервера принимает данные от администратора & клиент также. Когда я пытаюсь отправить данные клиента администратору, он не передается.

server.php

<?
set_time_limit(0);

// Set the ip and port we will listen on
$address = '127.0.0.1';
$port = 8888;

// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die('Could not bind to address'); // 0 for  SQL_TCP

// Bind the socket to an address/port
socket_bind($sock, 0, $port) or die('Could not bind to address');  //0 for localhost

// Start listening for connections
socket_listen($sock);

$admin = null;
$clients = array();

while(true) {
/* Accept incoming  requests and handle them as child processes */
$client = socket_accept($sock);

if(socket_getpeername($client, $address, $port)) {
echo "Client $address : $port is now connected to us. \n";
}

// Read the input  from the client – 2MB bytes
$input = socket_read($client, 2097152);
$data = json_decode($input);

print_r($data);

if($data->connection === "admin"){
echo "Admin connection\n";
$admin = $client;
}else if($data->connection === "client"){
echo "Got data from client\n";
$message = array('client_id' => $data->id, 'message' => $data->message);

$clients[$data->id] = $client;

if($admin !== null){
echo "Sending data to admin\n";
socket_write($admin, json_encode($message), strlen(json_encode($message)));
}else{
echo "Admin not available, sending response to client\n";
$message = 'Admin not available!';
socket_write($client, $message, strlen($message));
}
}

print_r($clients);

// socket_write($client, $response);
// socket_close($client);
}

// Close the master sockets
socket_close($sock);
?>

admin.php

<?
set_time_limit(0);

$server = '128.199.XXX.XXX';
$port = '8888';

if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

//Connect socket to remote server
if(!socket_connect($sock, $server, $port)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not connect: [$errorcode] $errormsg \n");
}

echo "Connection established \n";

$message = array('connection' => 'admin');

//Send the message to the server
if(!socket_send($sock, json_encode($message), strlen(json_encode($message)), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not send data: [$errorcode] $errormsg \n");
}

echo "Message send successfully \n";

if(socket_recv($sock, $buf, 10, MSG_WAITALL) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not receive data: [$errorcode] $errormsg \n");
}

print_r(json_decode($buf));

?>

client.php

<?
set_time_limit(0);

$server = '128.199.XXX.XXX';
$port = '8888';

if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

//Connect socket to remote server
if(!socket_connect($sock, $server, $port)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not connect: [$errorcode] $errormsg \n");
}

echo "Connection established \n";

$message = array('connection' => 'client', 'id' => time(), 'message' => 'Hi');

//Send the message to the server
if(!socket_send($sock, json_encode($message), strlen(json_encode($message)), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not send data: [$errorcode] $errormsg \n");
}

echo "Message send successfully \n";

if(socket_recv($sock, $buf, 10, MSG_WAITALL) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not receive data: [$errorcode] $errormsg \n");
}

print_r(json_decode($buf));
?>

Кто-нибудь мог сделать это раньше? аренда помоги мне добиться этого.

Заранее спасибо 🙂

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]