--Échanger des données avec un serveur VPS distant avec Python
Il y a de nombreuses parties non sécurisées en raison de la nature de ce que nous faisons, donc ce n'est que pour les tests et les loisirs.
Préparez le serveur. Dans mon exemple, j'ai emprunté le VPS de Sakura.
Ajoutez des paramètres de filtrage de paquets à partir du panneau de commande. Vous pouvez le désactiver, mais ce n'est pas recommandé car ce n'est pas bon pour la sécurité.
Dans cet exemple, je voulais utiliser le numéro de port «50000», donc je l'ai désactivé temporairement.
Réglez si nécessaire. Cet exemple est l'exemple de réglage VPS de Sakura. Modifiez également le numéro de port à votre convenance.
$ firewall-cmd --zone=public --add-port=50000/tcp --permanent
N'oubliez pas de refléter les paramètres!
$ firewall-cmd --reload
Dans cet exemple, php7.3 est installé.
remi
$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Il contient beaucoup de choses supplémentaires, mais veuillez les modifier si nécessaire.
$ yum -y install --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
Dans cet exemple, la bibliothèque externe PHP-WebSocket est utilisée.
Déposez binaires ici dans votre répertoire Apache.
$ cd /var/www/html
$ wget https://github.com/nicokaiser/php-websocket/archive/php-websocket.zip
$ unzip php-websocket.zip
$ sudo rm -rf php-websocket.zip
Après le téléchargement, éditez server.php
dans php-websocket / server
.
Si vim
n'est pas installé, utilisez vi
ou installez-le avec yum -y install vim
.
$ cd php-websocket/server
$ vim server.php
Modifiez et enregistrez `` 50000 (port)
selon le cas.
<?php
error_reporting(0);
require(__DIR__ . '/lib/SplClassLoader.php');
$classLoader = new SplClassLoader('WebSocket', __DIR__ . '/lib');
$classLoader->register();
$server = new \WebSocket\Server('<Adresse IPv4 globale>', 50000);
$server->registerApplication('echo', \WebSocket\Application\EchoApplication::getInstance());
$server->registerApplication('time', \WebSocket\Application\TimeApplication::getInstance());
$server->run();
Réécrivez ensuite la fonction de prise de contact dans php-websocket / lib / WebSocket / Connection.php
.
Réécrivez la fonction «handshake» sur la ligne «28» comme suit.
private function handshake($data)
{
socket_write($this->socket, $data, strlen($data));
$this->application->onConnect($this);
return true;
}
Commencez par la commande suivante.
$ php server.php
Lorsque cela se produit, le démarrage du serveur est terminé. Passez au client.
[root@~]# php server.php
2020-09-14 14:02:13 [info] Server created
Code côté client qui envoie des données.
--Remplacer `` 50000
est un port
import socket
if __name__ == '__main__':
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect(('<Adresse IPv4 globale>', 50000))
data = 'Hello From Python Client!'
sock.send(data.encode())
print(sock.recv(1024).decode())
Si les données transmises sont renvoyées en écho, cela réussit. C'est un peu poussé, mais j'ai pu le faire pour le moment.
[root@myserver]# php server.php
2020-09-14 15:00:53 [info] Server created
2020-09-14 15:00:55 [info] [client XXX] Connected
C'était étonnamment gênant. .. Merci pour votre visite.