下面代码一会功夫,客户端就连不上了。
```php
<?php
header("Content-Type:text/html;charset=utf-8");
//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "";
$port = 1456;
/**
* 创建一个SOCKET
* AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6
* SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM
*/
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n");
//阻塞模式
socket_set_block($sock) or die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n");
//绑定到socket端口
$result = socket_bind($sock, $address, $port) or die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n");
//开始监听
$result = socket_listen($sock, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n");
echo "OK\nBinding the socket on $address:$port ... ";
echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";
do { // never stop the daemon
//它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息
$msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
while(true){
//读取客户端数据
//echo "wait data \n";
//socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.
$buf = socket_read($msgsock, 8129);
if($buf==""){
//echo "No data \n";
//sleep for 10 seconds
// usleep(10000000);
//echo date('H:i:s');
// echo "\n";
}
else {
echo "Received data \n";
echo date('H:i:s');
$myfile = fopen("ddbm.xml", "w") or die("Unable to open file!");
fwrite($myfile, $buf);
fclose($myfile);
}
// if($buf == "bye"){
// //接收到结束消息,关闭连接,等待下一个连接
// socket_close($msgsock);
// continue;
// }
}
while(true);
//socket_close($sock);
?>
```
#####如果我的回答对你有帮助,请点击旁边的采纳按钮,谢谢
可能是:
1.网络问题(差)
2.防火墙问题(没开端口)
3.保护软件(拦截)
4.5.6.……见链接
检查防火墙开了相关端口沒
具体要跟踪调试一下,因为不知道你的运行平台和环境
如果有兴趣可以看看这个
物联网即时通信架构实现与实战-1-物联网即时通信架构实现与实战介绍-可用行师的在线视频教程 掌握网络编程,掌握物联网硬件通信,掌握socket编程 https://edu.csdn.net/course/detail/35439
socket_accept($sock) 你这样的写法只能处理单个请求
请参考如下来处理,非阻塞的方式来处理
<?php
$clients = array();
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'127.0.0.1',$port);
socket_listen($socket);
socket_set_nonblock($socket);
while(true)
{
if(($newc = socket_accept($socket)) !== false)
{
echo "Client $newc has connected\n";
$clients[] = $newc;
}
}
?>