一、开启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()) . "\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";
} do {
//得到一个链接
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";
break;
}
//welcome 发送到客户端
$msg = "<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 = "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);
} while(true);
//关闭socket
socket_close($sock); ?>

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

可以像如下输出

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

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

三、客户端

<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>\n";
$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()) . "\n";
} else {
echo "OK. \n";
} echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK \n";
}
$in = "HEAD / http/1.1\r\n";
$in .= "HOST: localhost \r\n";
$in .= "Connection: close\r\n\r\n";
$out = "";
echo "sending http head request ...";
socket_write($socket, $in, strlen($in));
echo "OK\n"; echo "Reading response:\n\n";
while ($out = socket_read($socket, 8192)) {
echo $out;
}
echo "closeing socket..";
socket_close($socket);
echo "ok .\n\n";

执行结果: 

server:

clinet:

最新文章

  1. 判断终端的js
  2. Yii2 定时任务创建(Console 任务)
  3. Nginx服务器之基础学习
  4. 实用SQL语句大全
  5. iOS开发——高级篇——二维码的生产和读取
  6. logcat 基本使用
  7. Power of Two
  8. DiskFileItemFactory类
  9. NPOI根据模板生成chart图表导出Excel
  10. Java字符串split函数的注意事项
  11. bootstrap的select2校验及不影响原来的格式
  12. linux内核链表分析
  13. Redis&#39; High Availability
  14. 使用Node.js作为后台进行爬虫
  15. 【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画
  16. VC2010编译错误
  17. linux工作中遇到的问题总结---更新中
  18. 利用 html2canvas 做个简单的诗词卡片生成器
  19. golang 互斥锁和读写锁
  20. BBS论坛(三)

热门文章

  1. 最小点覆盖 hdu--1054
  2. hdu-5748 Bellovin(LIS)
  3. [调试AvantCourier的笔记]
  4. 【USACO】Dining
  5. HDU2844(多重部分和)
  6. 【HBase】HBase笔记:HBase的Region机制
  7. 【Data Structure &amp; Algorithm】在排序数组中查找和为定值的两个数
  8. LeetCode: 521 Longest Uncommon Subsequence I(easy)
  9. WeFlow 简单使用教程
  10. 洛谷 - P1020 - 导弹拦截 - 最长上升子序列