关于php socket编程中遇到的一些问题
来源:互联网 发布:淘宝网品牌 编辑:程序博客网 时间:2024/05/22 03:30
网上有很多php socket的教程,但是我在自己写的时候还是碰到了几个问题,然后调试了一段时间,有一些目前也不知道原因:
1.第一个问题是,如果你是这么写的:
if($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) === false) echo 'socket_create() failed, reason:' . socket_strerror(socket_last_error()) . "\n";
那么你的$sock不会是socket资源而会得到一个false,要改为如下写法:
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if($sock === false) echo 'socket_create() failed, reason:' . socket_strerror(socket_last_error()) . "\n";
2.客户端的代码如果想得到服务器端write的内容,也是可以的,但是客户端的read要在write之后才可以:
$rs = socket_write($sock, $words); $hear = socket_read($sock, 8192);
3.客户端不能使用socket_accept。
4.现在还有一个问题就是如果客户端退出之后,服务器端还是会一直打印false。
5.下面的代码服务器端只能支持一个客户端的连接,怎么实现服务器端支持多客户端还不清楚。
下面列出服务器端和客户端的代码:
服务器端:
<?phperror_reporting(1);set_time_limit(0);ob_implicit_flush();$address = '127.0.0.1';$port = 7777;$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if($sock === 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()) . "\n";if(socket_listen($sock) === false) echo 'socket_listen() failed, reason:' . socket_strerror(socket_last_error()) . "\n";$msgsock = socket_accept($sock);if ($msgsock === false) echo 'socket_accept() failed, reason:' . socket_strerror(socket_last_error()) . "\n";do { $buf = socket_read($msgsock, 8192); echo $buf; $rs = socket_write($msgsock, 'i dont know') ; var_dump($rs); usleep(1000000);} while (true);socket_close($sock);?>
客户端:
<?phperror_reporting(1);set_time_limit(0);$address = '127.0.0.1';$port = 7777;$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if($sock === false) echo 'socket_create() failed, reason:' . socket_strerror(socket_last_error()) . "\n";$result = socket_connect($sock, $address, $port);if($result === false) echo 'shit';while ($result) { $words = fgets(STDIN); $rs = socket_write($sock, $words); $hear = socket_read($sock, 8192); var_dump($hear); if(trim($words) == 'bye') break;}socket_close($sock);?>
另外发现一个对于socket的比较好理解的解释:
socket就是应用层与TCP/IP协议族通信的中间软件抽象层
0 0
- 关于php socket编程中遇到的一些问题
- socket编程中遇到的一些小问题
- 关于学习编程中会遇到的一些小问题
- 关于Android Socket编程遇到的问题
- ipv6 socket 编程中遇到的问题
- 关于socket编程的一些问题
- 在用SWT进行socket编程中遇到的一些问题的总结
- 编程中遇到的一些问题记录
- mfc编程中遇到的一些问题
- Java Socket编程及遇到的一些问题
- 关于SOCKET编程中“烫烫烫...”的问题
- php遇到的一些问题
- socket编程中关于收发过程的一些特点
- 编程遇到的一些问题
- 关于socket的一些问题
- 11.29编程中遇到的一些问题以及解决办法
- UDP编程中遇到的一些问题总结
- 浅议C编程中遇到scanf函数的一些问题
- LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
- zoj 2750 Idiomatic Phrases Game
- SOJ.The hardest problem
- 《Java和Android开发实战详解》
- Owl Carousel 2强大的响应式jQuery旋转木马插件
- 关于php socket编程中遇到的一些问题
- Spring+CXF 全注解版
- 1019. 数字黑洞 (20)
- 1020. 月饼 (25)
- gcc在Ubuntu 12.04.5 LTS中的构建安装
- UVA 424 Integer Inquiry
- 结构体对齐问题
- Spring的FetchType
- Line输入和mic输入的区别