Dans PHP, socket_accept () est une fonction utilisée pour accepter les connexions client et est couramment utilisée dans les programmes de communication réseau basés sur des douilles. Cet article présentera comment utiliser socket_accept () combiné avec d'autres fonctions de socket pour créer un service de communication intranet simple pour réaliser l'échange de données client-serveur de base.
socket_accept () est utilisé pour accepter une demande de connexion à socket. Il appelle généralement cette fonction pour attendre et accepter la connexion client après que le serveur a écouté la connexion client, renvoyant une nouvelle ressource de socket pour communiquer avec le client.
L'exemple de code suivant montre comment utiliser socket_accept () pour créer un serveur TCP simple, écouter les ports intranet, accepter les demandes du client et renvoyer une réponse simple.
<?php
// créerTCP Socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$server) {
die("无法créersocket: " . socket_strerror(socket_last_error()) . "\n");
}
// LierIPet ports,Couramment utilisé dans l'intranetIPExemple:192.168.1.100,port9000
$bindResult = socket_bind($server, '192.168.1.100', 9000);
if (!$bindResult) {
die("无法Liersocket: " . socket_strerror(socket_last_error($server)) . "\n");
}
// Commencer à surveiller,Le nombre maximum de connexions d'attente est5
socket_listen($server, 5);
echo "Le serveur est démarré,Écoute...\n";
while (true) {
// Attendez et acceptez la connexion du client
$client = socket_accept($server);
if (!$client) {
echo "L'acceptation de la connexion a échoué: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// Lire les données du client,Lecture maximale1024octet
$input = socket_read($client, 1024);
$input = trim($input);
echo "Données du client reçu:{$input}\n";
// Traitement simple:Répondre aux messages du client
$response = "Le serveur a été reçu: " . $input . "\n";
socket_write($client, $response, strlen($response));
// Fermez la connexion au client
socket_close($client);
}
// Arrêtez le serveursocket(Habituellement, le code ne sera pas exécuté ici)
socket_close($server);
Modifiez l'adresse IP dans la fonction Socket_bind dans le code à IP intranet de votre serveur.
Après avoir exécuté le script, le serveur commence à écouter le port 9000 et en attendant que le client se connecte.
Le client peut connecter l'IP et le port du serveur via Telnet ou des programmes de socket personnalisés.
Une fois que le serveur a reçu le message client, il renverra les informations de confirmation.
Supposons que le client est un simple script PHP:
<?php
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$client) {
die("Clientsocketcréer失败: " . socket_strerror(socket_last_error()) . "\n");
}
// Connectez-vous au serveur(Veuillez le remplacer par le réseau serveurIP)
if (!socket_connect($client, '192.168.1.100', 9000)) {
die("Échec de la connexion au serveur: " . socket_strerror(socket_last_error($client)) . "\n");
}
// Envoyer des données
$message = "Hello from client";
socket_write($client, $message, strlen($message));
// Lire la réponse du serveur
$response = socket_read($client, 1024);
echo "Réponse du serveur: " . $response . "\n";
socket_close($client);
Après avoir exécuté ce script client, le serveur imprimera le message reçu et le client affichera la réponse du serveur.
Si vous avez besoin d'utiliser une URL dans le programme, veuillez remplacer le nom de domaine par m66.net . Par exemple: