Maison développement back-end tutoriel php Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code d'expérience de test de l'API de socket PHP]

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code d'expérience de test de l'API de socket PHP]

Sep 26, 2019 am 09:09 AM
php

Cet article utilise du code PHP pour tester un processus de communication de la couche de transport TCP.

Protocole TCP/IP

Vous pouvez vérifier les détails de ce protocole en vous-même< ;>

Le contenu de l'API tcp/udp de PHP est le contenu du manuel PHP

API socket

Version PHP testée

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données

Code PHP[Ceci est un exemple dans le manuel]

 <?php
/**
 * Created by PhpStorm.
 * User: 1655664358@qq.com
 * Date: 2019/6/19
 * Time: 9:55
 */
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we&#39;re getting
 * as it comes in. */
ob_implicit_flush();
$address = &#39;0.0.0.0&#39;;  //要监听的ip地址
$port = 54321;//要监听的端口 
//创建一个socket AF_INET是一个协议族 (一般都有AF_INET,AF_INET6,AF_UNIX c语言提供也是,只不过是地址族),而PHP叫网络协议  
//C语言提供的协议族是PF_INET,PF_INET6,PF_UNIX  
//SOCK_STREAM sock的服务类型  这里是字节流的服务类型用于TCP
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
//socket选项  ,选项一般在socket创建后设置 用于设置TCP的连接属性
//选项几乎和c差不多一样
//一般来说这些选项我们可以通过修改系统内核来调整 
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo &#39;Unable to set option on socket: &#39;. socket_strerror(socket_last_error()) . PHP_EOL;
}
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEPORT, 1)) {
    echo &#39;Unable to set option on socket: &#39;. socket_strerror(socket_last_error()) . PHP_EOL;
}
//绑定【有的叫命名socket】
if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
//监听 此时服务器进入  LISTEN状态
if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
do {
//接受客户端连接sock  从系统内核接受队列里取  如果取出则双方进入了ESTABLISHED状态
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type &#39;quit&#39;. To shut down the server type &#39;shutdown&#39;.\n";
    socket_write($msgsock, $msg, strlen($msg));
    do {
    //读客户端数据【从TCP接收接受缓冲区取】
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == &#39;quit&#39;) {
            break;
        }
        if ($buf == &#39;shutdown&#39;) {
        //发送FIN结束报文,正常情况服务器会进入CLOSED状态
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said &#39;$buf&#39;.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);
socket_close($sock);
Copier après la connexion

Type de service de socket

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Fichier d'options TCP/IP

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Ensuite, nous démarrons le service

Commande de visualisation de l'état du service : netstat -ntlapc L'état peut être actualisé toutes les secondes

Outil tcpdump :

tcpdump -A -XX -i lo
Copier après la connexion

Client nous utilisons l'outil Just connect telent et testons

L'image du test est la suivante

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Schéma de connexion et d'arrêt

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]

Si l'arrêt est initié par le client, l'état est :

Le client envoie d'abord un paquet FIN de message de fin. À ce moment, il est dans l'état FIN_WAIT1. Le serveur confirme que la réponse est dans l'état CLOSE_WAIT. >À ce moment, le client est dans l'état FIN_WAIT2. Lorsque le serveur envoie également un FIN. À la fin du message, le serveur est dans l'état LAST_LOCK. Après confirmation du client, il est dans l'état TIME_WAIT. Le serveur est fermé.

Diagramme de transition d'état

Établissement et état de fermeture de la connexion TCP et processus de communication de transmission de données [y compris le code dexpérience de test de lAPI de socket PHP]Peu importe que vous utilisiez l'API SOCKET fournie par PHP ou SWOOLE ou le test écrit en C c'est pareil !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

See all articles