Dans PHP Network Programming, socket_create () et socket_accept () sont deux fonctions très importantes, en particulier lors de la création d'applications côté serveur basées sur TCP ou UDP. Cet article présentera les fonctions de base et l'utilisation de ces deux fonctions en détail et montrera comment elles peuvent être utilisées ensemble pour implémenter un programme simple côté serveur.
socket_create () est utilisé pour créer une ressource de socket pour la communication réseau, qui est le point de départ de la programmation réseau. Le prototype de fonction est le suivant:
resource socket_create ( int $domain , int $type , int $protocol )
$ Domain : Spécifie la famille du protocole, couramment utilisée sont AF_INET (IPv4), AF_INET6 (IPv6) et AF_UNIX (communication locale).
$ type : spécifiez le type de socket. Les types communs sont sock_stream (connexion de streaming TCP), sock_dgram (datagram UDP).
$ Protocole : spécifie le protocole spécifique. Habituellement, TCP utilise SOL_TCP et UDP utilise SOL_UDP .
Renvoie une ressource de socket lorsque la création est réussie et renvoie FALSE en cas d'échec.
Exemple:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("créer socket échouer: " . socket_strerror(socket_last_error()));
}
socket_accept () est utilisé pour accepter les connexions client sur le socket écouté par le serveur. Son prototype de fonction est:
resource socket_accept ( resource $socket )
La prise de paramètre $ est la prise créée et écoutée avec socket_create () .
Après l'appel, s'il existe une demande de connexion client, une nouvelle ressource de socket est renvoyée pour communiquer avec le client; S'il échoue, false est renvoyé.
Pour permettre au serveur d'écouter les demandes du client et de recevoir des connexions, le processus habituel est le suivant:
Créer une douille
Créez une prise à l'aide de socket_create () .
Lier l'adresse et le port <br> Utilisez socket_bind () pour lier le socket à la propriété intellectuelle et au port locale.
Écouter Socket
Utilisez socket_listten () pour écouter sur le port et préparer à accepter la connexion.
Accepter la connexion <br> Utilisez socket_accept () pour bloquer et attendre que le client se connecte, et renvoyez une nouvelle prise après le succès.
Lire et écrire des données <br> Communication avec le client via une nouvelle prise.
Fermez la connexion <br> Fermez la prise une fois la communication terminée.
Voici un exemple complet qui montre comment implémenter un serveur TCP simple à l'aide de ces deux fonctions:
<?php
// créer TCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("créer socket échouer: " . socket_strerror(socket_last_error()));
}
// Lier IP et ports
if (!socket_bind($server, "0.0.0.0", 8080)) {
die("Lier socket échouer: " . socket_strerror(socket_last_error($server)));
}
// Commencer à surveiller,Le plus autorisé5Aligner les connexions
if (!socket_listen($server, 5)) {
die("监听échouer: " . socket_strerror(socket_last_error($server)));
}
echo "Le serveur est démarré,En attente de connexion...\n";
while (true) {
// Bloquer et attendre la connexion du client
$client = socket_accept($server);
if ($client === false) {
echo "接收连接échouer: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// Lire les données du client
$input = socket_read($client, 1024);
echo "Données du client reçu: $input\n";
// Envoyer une réponse au client
$response = "Hello from m66.net server!";
socket_write($client, $response, strlen($response));
// Fermer la connexion du client
socket_close($client);
}
socket_close($server);
?>
Dans cet exemple:
Le serveur est lié au port 8080 de toutes les adresses IP locales.
Utilisez socket_accept () pour recevoir les demandes de connexion du client et renvoyez une nouvelle prise après le succès.
Lisez les données envoyées par le client et renvoyez une réponse simple.
Fermez la connexion au client et continuez à attendre une nouvelle connexion.
socket_create () est utilisé pour créer le canal de communication sous-jacent.
socket_accept () est utilisé par le serveur pour recevoir des connexions client et renvoyer des sockets qui interagissent avec le client.
La combinaison des deux est la base de la programmation côté serveur TCP.
Dans les applications réelles, des erreurs, des connexions simultanées et des détails de transmission de données sont également nécessaires.
J'espère que cet article peut vous aider à mieux comprendre et appliquer socket_create () et socket_accept () dans PHP pour créer facilement des services de réseau basés sur des socket.