client:

error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 1935;
$ip = "127.0.0.1";
/*
+-------------------------------
* @socket连接整个过程
+-------------------------------
* @socket_create
* @socket_connect
* @socket_write
* @socket_read
* @socket_close
+--------------------------------
*/
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 第一个参数”AF_INET”用来指定域名;
// 第二个参数”SOCK_STREM”告诉函数将创建一个什么类型的Socket(在这个例子中是TCP类型),UDP是SOCK_DGRAM if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
} else {
echo "OK.\n";
}
echo "试图连接 '$ip' 端口 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
} else {
echo "连接OK\n";
}
$in = "Ho\r\n";
$in.= "first blood335555553\r\n";
$out = '';
if (!socket_write($socket, $in, strlen($in))) {
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
} else {
echo "发送到服务器信息成功!\n";
echo "发送的内容为:<font color='red'>$in</font> <br>";
}
while ($out = socket_read($socket, 8192)) {
echo "接收服务器回传信息成功!\n";
echo "接受的内容为:", $out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";

server:

//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
+-------------------------------
* @socket通信整个过程
+-------------------------------
* @socket_create
* @socket_bind
* @socket_listen
* @socket_accept
* @socket_read
* @socket_write
* @socket_close
+--------------------------------
*/
/*---------------- 以下操作都是手册上的 -------------------*/ if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { // 创建一个Socket链接
echo "socket_create() 失败的原因是:" . socket_strerror($sock) . "\n";
} if (($ret = socket_bind($sock, $ip, $port)) < 0) { //绑定Socket到端口
echo "socket_bind() 失败的原因是:" . socket_strerror($ret) . "\n";
}
if (($ret = socket_listen($sock, 4)) < 0) { // 开始监听链接链接
echo "socket_listen() 失败的原因是:" . socket_strerror($ret) . "\n";
}
$count = 0;
do {
if (($msgsock = socket_accept($sock)) < 0) { //堵塞等待另一个Socket来处理通信
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;
} else {
//发送消息到客户端
$msg = "测试成功!\n";
socket_write($msgsock, $msg, strlen($msg)); //接收客户端消息
echo "测试成功了啊\n";
$buf = socket_read($msgsock, 8192); // 获得客户端的输入
$talkback = "收到的信息:$buf\n";
echo $talkback;
if (++$count >= 5) {
break;
};
}
//echo $buf;
socket_close($msgsock);
} while (true);
socket_close($sock);

参考博主:http://www.cnblogs.com/nixi8/p/4904496.html

最新文章

  1. Deep Residual Learning
  2. 学习Hadoop整体理解
  3. crm SSRS 报表 导出格式控制
  4. poj 3207 Ikki&#39;s Story IV - Panda&#39;s Trick (2-SAT)
  5. Apache Shiro入门实例
  6. IIC的标准操作函数集(C51)包含C和H文件
  7. ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因
  8. JavaScript中SetInterval与setTimeout的用法详解
  9. Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法
  10. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)
  11. Problem : 1013 ( Digital Roots )
  12. golang面向对象和interface接口
  13. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)
  14. Linux下单独编译安装PHP扩展包
  15. python音乐播放器第二版
  16. Git配置用户名与邮箱
  17. ASP.NET CORE中控制器内return HTML 内容自动编码问题
  18. API设计风格(RRC、REST、GraphQL、服务端驱动)
  19. 【转】C# Async/Await 异步编程中的最佳做法
  20. 基于注解的方式管理Bean

热门文章

  1. bzoj2839 集合计数(容斥+组合)
  2. NUC980 运行 RT-Thread 时使用 GPIO
  3. .Net Core 3.1简单搭建微服务
  4. 一、JavaSE语言基础之关键字与标示符
  5. 使用curl断点续传下载文件
  6. 关于windows11的0x800f0950语言包安装失败
  7. Java:TreeMap中LinkedHashMap和Map中HashMap的区别
  8. mysql中的条件语句case when/if函数
  9. ROS踩坑笔记总结
  10. Docker部署Mysq集群