php语言实现tcpip协议
来源:互联网 发布:凯云水利软件 编辑:程序博客网 时间:2024/06/06 04:17
PHP主要是实现http协议的,最近我和我同学在做一个网络的项目需要用到底层的tcp协议和http协议两种协议,php自然是实现http协议的良好语言,但是它也可以不怎么完美的实现tcp协议,所以最终使用php作为我们的工具。
首先我找到了两个描写使用php语言来实现tcp协议的代码:
代码地址:
http://www.hdj.me/php-listen-as-socket-server
这段代码很有启发意味,
1)如果你运行的话会发现,他使用了php的stdin,这个很难用,即使会使用了,也会发现server和client的界面都是死在那里的,因为php是解释性语言,代码里有个while(true)自然无法跳出,所以代码有点错误。
2) 由于网口的port只能被绑定一次,所以页面刷新的话会出现warning。
我更改的代码如下:(代码基本上没有变)
server部分:
client部分:
代码运行的时候,server端依然是没有任何反映,但是client端运行会出反映。(你总不能把server的while(true)去掉吧?)
转自:php语言实现tcpip协议
------------------------华丽分割线,为避免上文提到参考文章失效,特备份如下-------------------
PHP做端口监听
服务器
<?php // Server// 设置错误处理error_reporting(E_ALL);// 设置运行时间set_time_limit(0);// 起用缓冲ob_implicit_flush();$ip = "127.0.0.1"; // IP地址$port = 1000; // 端口号 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 创建一个SOCKETif ($socket) echo "socket_create() successed!\n";else echo "socket_create() failed:".socket_strerror($socket)."\n"; $bind = socket_bind($socket, $ip, $port); // 绑定一个SOCKETif ($bind) echo "socket_bind() successed!\n";else echo "socket_bind() failed:".socket_strerror($bind)."\n"; $listen = socket_listen($socket); // 间听SOCKETif ($listen) echo "socket_listen() successed!\n";else echo "socket_listen() failed:".socket_strerror($listen)."\n"; while (true) { $msg = socket_accept($socket); // 接受一个SOCKET if (!$msg) { echo "socket_accept() failed:".socket_strerror($msg)."\n"; break; } $welcome = "Welcome to PHP Server!\n"; socket_write($msg, $welcome, strlen($welcome)); while (true) { $command = strtoupper(trim(socket_read($msg, 1024))); if (!$command) break; switch ($command) { case "HELLO": $writer = "Hello Everybody!"; break; case "QUIT": $writer = "Bye-Bye"; break; case "HELP": $writer = "HELLO\tQUIT\tHELP"; break; default: $writer = "Error Command!"; } socket_write($msg, $writer, strlen($writer)); if ($command == "QUIT") break; } socket_close($msg);}socket_close($socket); // 关闭SOCKET?>
客户端
<?php // Client// 设置错误处理error_reporting(E_ALL);// 设置处理时间set_time_limit(0); $ip = "127.0.0.1"; // IP 地址$port = 1000; // 端口号 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 创建一个SOCKETif ($socket) echo "socket_create() successed!\n";else echo "socket_create() failed:".socket_strerror($socket)."\n"; $conn = socket_connect($socket, $ip, $port); // 建立SOCKET的连接if ($conn) echo "Success to connection![".$ip.":".$port."]\n";else echo "socket_connect() failed:".socket_strerror($conn)."\n"; echo socket_read($socket, 1024); $stdin = fopen('php://stdin', 'r');while (true) { $command = trim(fgets($stdin, 1024)); socket_write($socket, $command, strlen($command)); $msg = trim(socket_read($socket, 1024)); echo $msg."\n"; if ($msg == "Bye-Bye") break;}fclose($stdin);socket_close($socket);?>
阅读全文
0 0
- php语言实现tcpip协议
- php语言实现tcpip协议
- TCPIP协议
- J2SE通过TCPIP协议实现断点续传上传实现
- Android通过TCPIP协议实现断点续传上传实现
- Android的通过TCPIP协议实现断点续传上传实现
- tingkman-tcpip协议分析和实现1网络报文帧进入tcpip协议栈初步处理流程
- tcpip协议 之三
- TCPIP传送协议
- TCPIP协议图
- TCPIP协议图
- java-TCPIP协议学习
- tcpip握手协议
- 深入学习TCPIP协议
- TCPIP 几种开源协议栈
- 《TCPIP》---ARP协议总结
- TCPIP协议概览
- TCPIP协议族体系结构
- POJ
- HDU-1398-Square Coins(完全背包)
- Oulipo 、Power Strings (KMP入门)
- 几行代码搞定Android底部导航栏
- 《机器学习》阅读心得——六、支持向量机
- php语言实现tcpip协议
- IaaS、Paas、Saas
- C语言基础之字符串
- socket并发编程博客推荐
- 使用迅雷下载百度云上文件
- FPGA错误总结
- POJ 2104 K-th Number
- java map集合遍历
- 单例模式