zoukankan      html  css  js  c++  java
  • PHP 中使用socket

    一、开启socket

    phpinfo();查看是否开启了socket扩展,否则在php.ini中开启。

    二、服务器端代码的写法

    <?php
    error_reporting(E_ALL);
    set_time_limit(0);
    //ob_implicit_flush();
    
    $address = '127.0.0.1';
    $port = 10005;
    //创建端口
    if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    	echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "
    ";
    }
    
    //绑定
    if (socket_bind($sock, $address, $port) === false) {
    	echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "
    ";
    }
    
    //监听
    if (socket_listen($sock, 5) === false) {
    	echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "
    ";
    }
    
    do {
    	//得到一个链接
    	if (($msgsock = socket_accept($sock)) === false) {
    		echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "
    ";
    		break;
    	}
    	//welcome  发送到客户端
    	$msg = "<font color='red'>server send:welcome</font><br/>";
    	socket_write($msgsock, $msg, strlen($msg));
    	echo 'read client message
    ';
    	$buf = socket_read($msgsock, 8192);
    	$talkback = "received message:$buf
    ";
    	echo $talkback;
    	if (false === socket_write($msgsock, $talkback, strlen($talkback))) {
    		echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."
    ";
    	} else {
    		echo 'send success';
    	}
    	socket_close($msgsock);
    } while(true);
    //关闭socket
    socket_close($sock);
    
    
    ?>

    服务器端需要在cli模式是执行,有可能cli模式下php.ini文件载入的不一样

    可以像如下输出

    image

    这时候在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini) Path => C:WINDOWS 。不是我的php.ini 文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下

    image

    注意的是我的php可以直接执行时配置了环境变量。

    三、客户端

    <?php
    //error_reporting(E_ALL);
    echo "<h2>tcp/ip connection </h2>
    ";
    $service_port = 10005;
    $address = '127.0.0.1';
    
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
    	echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "
    ";
    } else {
    	echo "OK. 
    ";
    }
    
    echo "Attempting to connect to '$address' on port '$service_port'...";
    $result = socket_connect($socket, $address, $service_port);
    if($result === false) {
    	echo "socket_connect() failed.
    Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "
    ";
    } else {
    	echo "OK 
    ";
    }
    $in = "HEAD / http/1.1
    ";
    $in .= "HOST: localhost 
    ";
    $in .= "Connection: close
    
    ";
    $out = "";
    echo "sending http head request ...";
    socket_write($socket, $in, strlen($in));
    echo  "OK
    ";
    
    echo "Reading response:
    
    ";
    while ($out = socket_read($socket, 8192)) {
    	echo $out;
    }
    echo "closeing socket..";
    socket_close($socket);
    echo "ok .
    
    ";
     
    执行结果: 
    server:

    image


    client:

    image

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/mr-amazing/p/3991114.html
Copyright © 2011-2022 走看看