Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 434|回复: 0

[默认分类] php中socket的使用

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-13 11:03:53 | 显示全部楼层 |阅读模式
    一、开启socket
    phpinfo();查看是否开启了socket扩展,否则在php.ini中开启。
    二、服务器端代码的写法

    1. <?php
    2. error_reporting(E_ALL);
    3. set_time_limit(0);
    4. //ob_implicit_flush();
    5. $address = "127.0.0.1";
    6. $port = 10005;
    7. //创建端口
    8. if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    9.         echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";
    10. }
    11. //绑定
    12. if (socket_bind($sock, $address, $port) === false) {
    13.         echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
    14. }
    15. //监听
    16. if (socket_listen($sock, 5) === false) {
    17.         echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
    18. }
    19. do {
    20.         //得到一个链接
    21.         if (($msgsock = socket_accept($sock)) === false) {
    22.                 echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";
    23.                 break;
    24.         }
    25.         //welcome  发送到客户端
    26.         $msg = "<font color="red">server send:welcome</font><br/>";
    27.         socket_write($msgsock, $msg, strlen($msg));
    28.         echo "read client message\n";
    29.         $buf = socket_read($msgsock, 8192);
    30.         $talkback = "received message:$buf\n";
    31.         echo $talkback;
    32.         if (false === socket_write($msgsock, $talkback, strlen($talkback))) {
    33.                 echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";
    34.         } else {
    35.                 echo "send success";
    36.         }
    37.         socket_close($msgsock);
    38. } while(true);
    39. //关闭socket
    40. socket_close($sock);
    41. ?>
    复制代码



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

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


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

    三、客户端

    1. <?php
    2. //error_reporting(E_ALL);
    3. [url=http://www.php.net/echo]echo[/url] "<h2>tcp/ip connection </h2>\n";
    4. $service_port = 10005;
    5. $address = "127.0.0.1";
    6. $[url=http://www.php.net/socket]socket[/url] = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    7. [url=http://www.php.net/if]if[/url] ($[url=http://www.php.net/socket]socket[/url] === [url=http://www.php.net/false]false[/url]) {
    8.         [url=http://www.php.net/echo]echo[/url] "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
    9. } [url=http://www.php.net/else]else[/url] {
    10.         [url=http://www.php.net/echo]echo[/url] "OK. \n";
    11. }
    12. [url=http://www.php.net/echo]echo[/url] "Attempting to connect to "$address" on port "$service_port"...";
    13. $result = socket_connect($[url=http://www.php.net/socket]socket[/url], $address, $service_port);
    14. [url=http://www.php.net/if]if[/url]($result === [url=http://www.php.net/false]false[/url]) {
    15.         [url=http://www.php.net/echo]echo[/url] "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($[url=http://www.php.net/socket]socket[/url])) . "\n";
    16. } [url=http://www.php.net/else]else[/url] {
    17.         [url=http://www.php.net/echo]echo[/url] "OK \n";
    18. }
    19. $in = "HEAD / http/1.1\r\n";
    20. $in .= "HOST: localhost \r\n";
    21. $in .= "Connection: close\r\n\r\n";
    22. $out = "";
    23. [url=http://www.php.net/echo]echo[/url] "sending http head request ...";
    24. socket_write($[url=http://www.php.net/socket]socket[/url], $in, [url=http://www.php.net/strlen]strlen[/url]($in));
    25. [url=http://www.php.net/echo]echo[/url]  "OK\n";
    26. [url=http://www.php.net/echo]echo[/url] "Reading response:\n\n";
    27. [url=http://www.php.net/while]while[/url] ($out = socket_read($[url=http://www.php.net/socket]socket[/url], 8192)) {
    28.         [url=http://www.php.net/echo]echo[/url] $out;
    29. }
    30. [url=http://www.php.net/echo]echo[/url] "closeing socket..";
    31. socket_close($[url=http://www.php.net/socket]socket[/url]);
    32. [url=http://www.php.net/echo]echo[/url] "ok .\n\n";
    复制代码
    复制代码
    1. 执行结果:
    复制代码
    1. server:
    复制代码



    client:




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-25 14:33 , Processed in 0.312449 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表