php socket
socket demo代码如下 :
server:
server.php
- <?php
- //phpinfo();
- //确保在连接客户端时不会超时
- 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) {
- echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
- }
- if(($ret = socket_bind($sock,$ip,$port)) < 0) {
- 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) {
- 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);
- ?>
client:
client.php
- <?php
- 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);
- 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 blood\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";
- ?>
windows 运行:
修改 php.ini
开启拓展:extension=php_sockets.dll
cmd 运行如下
Linux :
拷贝文件到 /www/php/ 目录
运行 如下:
php socket的更多相关文章
- socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
- Socket聊天程序——Common
写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- Socket聊天程序——服务端
写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...
- Socket聊天程序——初始设计
写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- Android Socket连接PC出错问题及解决
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
- Mono 3.2.3 Socket功能迎来一稳定的版本
由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
随机推荐
- 微软发布Windows 10:连Windows 7都能免费升级了
今日凌晨,微软宣布Windows 10发布. Windows10 整体重置了 Window8 的设计,恢复了原有的开始菜单设置,系统新增了虚拟桌面功能,搜索框加分类项的形式替代原有的两栏式控制面板界面 ...
- 为什么心跳包(HeartBeat)是必须的?
几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包.思考思考,心跳包是必须的吗?为什么需要心跳包?TCP没有提供断线检测的方法吗?TCP提供的 ...
- ubuntu安装redis
1.下载安装root@21ebdf03a086:/# apt-cache search redisroot@21ebdf03a086:/# apt-get install redis-server a ...
- servlet--转向forward与重定向
当使用forward形式跳转servlet时,地址栏会显示跳转前的servlet访问地址. 跳转是在服务端实现的,客户浏览器并不知道该跳转动作. forward可以跳转到另一个servlet,jsp, ...
- Seo的几个境界
Seo的境界 第一层,弄些关键词排名上去. 是的,大部分人理解的Seoer,就到此为止 这里有技巧若干若干.很值得一些人去卖弄. 第二层,大量广泛的收录,很好的pr值 恭喜您,把握搜索长尾, 这种不显 ...
- Atitit.研发管理--提升效率--软件开发方法DSM总结o99
Atitit.研发管理--提升效率--软件开发方法DSM总结o99 1. 什么是DSM? 1 2. DSM使用的语言DSL 2 3. 模型的优点 2 4. DSM 跟与MDA区别 2 5. MDA的实 ...
- .NET Remoting学习笔记(二)激活方式
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科 ♂风车车.Net 激活方式概念 在 ...
- 转:LAV Filter 源代码分析
1: 总体结构 LAV Filter 是一款视频分离和解码软件,他的分离器封装了FFMPEG中的libavformat,解码器则封装了FFMPEG中的libavcodec.它支持十分广泛的视音频格式. ...
- Andorid--java0
java code: public class Hello{ public static void main(String argv[]) { System.out.printl ...
- 解决eclipse使用Search弹出错误问题
在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,虽然错误内容有时候不同,但是解决办法都一样. 这个问题是由于eclipse中文件不同步引起的.在eclipse中,工程文件是由eclipse ...