Я разрабатываю новое приложение на основе сокетов для взаимодействия с моими клиентами, и я хочу добиться этого с помощью программирования сокетов.
Скажем так 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));
?>
Кто-нибудь мог сделать это раньше? аренда помоги мне добиться этого.
Заранее спасибо 🙂
Задача ещё не решена.
Других решений пока нет …