zoukankan      html  css  js  c++  java
  • PHP 结合实例认识 Socket

    一、简介

    (本部分参考自 揭开Socket的神秘面纱 - 源码工作室

    请结合下图 Socket 抽象层的位置来理解。Socket 是应用层和 TCP/IP 协议族进行通信的中间软件抽象层,是一组接口。在设计模式中,就是一个门面模式,它把复杂的实现封装在接口后面,而只提供了一组简单的接口给用户调用。在普遍的程序语言中,这些接口一般是 create、bind、listen、accept、write、read、close 和 connect 等等。

    二、实例

    效果图

    代码

    服务端:Server.php

    <?php
    set_time_limit(0);   // 去掉时间限制
    ob_implicit_flush(); // 开启强制刷新
    
    // 1. 创建Socket
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    
    // 2. 绑定端口和IP
    socket_bind($socket, '127.0.0.1', 11279);
    
    // 3. 端口监听
    socket_listen($socket);
    echo 'Server is listening!' . PHP_EOL;
    
    // 4. accept阻塞进程
    $connect = socket_accept($socket); // 直到有连接进入,accept才会返回
    echo 'Client [' . $connect . '] is accessing...' . PHP_EOL;
    
    // 5. 交互
    socket_write($connect, 'Welcome, visitor! Now you can send message to the server.' . PHP_EOL);
    while ($connect) {
    	// 获取请求
    	$request = socket_read($connect, 1024);
    	echo 'Client ['. $connect .'] message: ' . $request;
    
    	// 关闭连接
    	if($request == "bye" . PHP_EOL){
    		socket_shutdown($connect);
    		break;
    	}
    
    	// 发送响应
    	$response = 'Your sended message: ' . $request;
    	socket_write($connect, $response);
    }
    
    // 6. 销毁Socket
    socket_close($socket);

    客户端:client.php

    <?php
    // 1. 创建Socket
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    
    // 2. 建立连接
    $result = socket_connect($socket, '127.0.0.1', 11279);
    if($result === false){
    	socket_close($socket);
    	die('Socket connect failed: ' . socket_strerror(socket_last_error($socket)));
    }
    
    // 3. 交互
    while($result){    
        // 获取响应
        $response = socket_read($socket, 1024);
        echo $response;
    
        // 发送请求
        $request = fgets(STDIN);
        socket_write($socket, $request, 1024);
    
        // 关闭连接
        if($request == "bye" . PHP_EOL){
    		socket_shutdown($socket);
        	break;
        }
    }
    
    // 4.销毁Socket
    socket_close($socket);
    

      

    参考链接:

    揭开Socket编程的面纱

    【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    php socket通信(tcp/udp)实例分析

  • 相关阅读:
    调试 XPTable
    适合IT经理的编程语言
    请问我如何在一个webBrowser控件中加载一个 html格式的字符串 _NET技术 C#
    DotNetBar 教程
    思梅
    无家可归的苦
    思霞
    思兰
    十大因素——造就优秀的董事长
    思萍
  • 原文地址:https://www.cnblogs.com/mingc/p/7677433.html
Copyright © 2011-2022 走看看