基于php socket(fsockopen)的应用实例分析

时间:2023-11-18 21:38:32 

fsockopen函数能够运用,首先要开启php.ini中的allow_url_open=on;
fsockopen是对socket客户端代码的封装,该函数中封装了socket_create,socket_connect。
服务器端代码:server.php


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


客户端代码:fsocket.php


<?php
$fp = fsockopen("127.0.0.1", 10008, &$errno, &$errstr, 10);
if (!$fp) {
echo $errstr . " (". $errno . ")<br>n";
} else {
$in = "HEAD / http/1.1\r\n";
$in .= "HOST: localhost \r\n";
$in .= "Connection: close\r\n\r\n";
fputs($fp, $in);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}


标签:php,socket,fsockopen
0
投稿

猜你喜欢

  • 浅谈PyQt5中异步刷新UI和Python多线程总结

    2023-08-22 01:37:18
  • 不固定参数的存储过程实现代码

    2024-01-22 16:36:39
  • 一文弄懂什么是MySQL的回表

    2024-01-22 16:56:56
  • python如何获取文件当前位置和定位某个位置

    2022-01-10 17:40:36
  • Python语法学习之正则表达式的量词汇总

    2023-07-20 03:08:59
  • python逆向微信指数爬取实现步骤

    2022-03-31 03:36:48
  • 解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    2024-01-26 03:05:05
  • Python流程控制语句的深入讲解

    2023-12-01 00:06:31
  • MySQL数据库Shell import_table数据导入

    2024-01-15 02:34:55
  • python 基于opencv 绘制图像轮廓

    2023-07-11 05:47:54
  • Python数据分析 Pandas Series对象操作

    2021-07-17 20:18:52
  • python 实现任务管理清单案例

    2023-09-01 04:59:17
  • Spring MVC 框架搭建配置方法及详解

    2024-03-13 19:04:36
  • GO语言不固定参数函数与匿名函数的使用

    2024-02-17 14:42:17
  • 不支持RSS,如何跟踪网站的内容更新?

    2008-09-08 12:38:00
  • 原生JavaScript实现网页版计算器

    2024-04-23 09:27:08
  • 关于Idea向GitHub push代码时一直重复提示输入用户名和密码的问题

    2023-02-28 07:57:10
  • 原生JS实现匀速图片轮播动画

    2024-06-07 15:28:15
  • python如何制作英文字典

    2021-12-01 10:30:00
  • CSS Menu导航菜单下载网站整理

    2007-10-21 19:49:00
  • asp之家 网络编程 m.aspxhome.com