• 用PHP的socket实现客户端到服务端的通信


    服务端

    <?php
    error_reporting(E_ALL);
    set_time_limit(0);
    ob_implicit_flush();
    //本地IP
    $address = 'localhost';
    //设置用111端口进行通信
    $port = 111;
    //创建SOCKET
    if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    		echo "socket创建失败原因 " . socket_strerror($sock) . "
    ";
    }
    
    if (($ret = socket_bind($sock, $address, $port)) < 0) {
    		echo "创建套接字失败原因 " . socket_strerror($ret) . "
    ";
    }
    //监听
    if (($ret = socket_listen($sock, 5)) < 0) {
    		echo "监听失败原因 " . socket_strerror($ret) . "
    ";
    }
    do {
    	//接收命令 
    	if (($msgsock = @socket_accept($sock)) < 0) {
    		echo "命令接收失败原因: " . socket_strerror($msgsock) . "
    ";
    		break;
    	}
    	$msg = "
    PHP Test Server. 
    " ."用quit,shutdown,sun...等命令测试.
    ";
    
    	@socket_write($msgsock, $msg, strlen($msg));
    
    	do {
    		if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
    				echo "socket_read() failed: reason: " . socket_strerror($ret) . "
    ";
    				break 2;
    		}
    		if (!$buf = trim($buf)) {
    				continue;
    		}
    		if ($buf == 'quit') {
    				break;
    		}
    		if ($buf == 'shutdown') {
    				socket_close($msgsock);
    				break 2;
    		}
    		if ($buf == 'sun') {
    				echo'what are you doing?';
    		}
    		$talkback = "Backinformation : '$buf'.
    ";
    		socket_write($msgsock, $talkback, strlen($talkback));
    		echo "$buf
    ";
    	} while (true);
    
    	socket_close($msgsock);
    
    } while (true);
    
    socket_close($sock);
    ?>
    

    客户端代码

    <?php
    error_reporting(E_ALL);
    //端口111
    $service_port = 111;
    //本地
    $address = 'localhost';
    //创建 TCP/IP socket
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket < 0) {
    		echo "socket创建失败原因: " . socket_strerror($socket) . "
    ";
    } else {
    		echo "OK,HE HE.
    ";
    }
    $result = socket_connect($socket, $address, $service_port);
    if ($result < 0) {
    		echo "SOCKET连接失败原因: ($result) " . socket_strerror($result) . "
    ";
    } else {
    		echo "OK.
    ";
    }
    //发送命令
    $in = "HEAD / HTTP/1.1
    ";
    $in .= "Connection: Close
    
    ";
    $out = '';
    echo "Send Command..........";
    $in = "sun
    ";
    socket_write($socket, $in, strlen($in));
    echo "OK.
    ";
    echo "Reading Backinformatin:
    
    ";
    while ($out = socket_read($socket, 2048)) {
    		echo $out;
    }
    echo "Close socket........";
    socket_close($socket);
    echo "OK,He He.
    
    ";
    ?>
    

    这两段代码是简单介绍用PHP实现客户端和服务端的通信
    client.php
    server.php
    具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
    再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

      

  • 相关阅读:
    mysql基础(三)存储引擎和锁
    为给定字符串生成MD5指纹
    区块链基本原理,Part-2:工作量证明和权益证明
    区块链基本原理,Part-1:拜占庭容错
    区块链挖矿 2.0
    以太坊 2.0 中的验证者经济模型,Part-2
    以太坊 2.0 中的验证者经济模型,Part-1
    Java归并排序之递归
    Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
    Java棋盘覆盖问题
  • 原文地址:https://www.cnblogs.com/whlives/p/4877595.html
Copyright © 2020-2023  润新知