PHP:socket_recv()失败;原因:成功?
我在socket服务器中使用PHP。我创建套接字并写入套接字,但无法读取。我已将所有客户端套接字连接到clients阵列中。我使用flagMSG_DONTWAIT,因为如果我使用其他flag,我无法与其他客户握手。在这里帮助我找到bug,或者给我一些在这种环境下可以工作的代码PHP:socket_recv()失败;原因:成功?,php,websocket,Php,Websocket,我在socket服务器中使用PHP。我创建套接字并写入套接字,但无法读取。我已将所有客户端套接字连接到clients阵列中。我使用flagMSG_DONTWAIT,因为如果我使用其他flag,我无法与其他客户握手。在这里帮助我找到bug,或者给我一些在这种环境下可以工作的代码 foreach($clients as $client) { if ( socket_recv($client, $buf, 1024, MSG_DONTWAIT) >= 1) { print
foreach($clients as $client) {
if ( socket_recv($client, $buf, 1024, MSG_DONTWAIT) >= 1) {
print_r($buff);
} else {
echo "socket_recv() failed; reason: " .
socket_strerror(socket_last_error($socket)) . "\n";
}
}
然而,我得到了下面的信息。请帮助我了解如何接收客户的信息
PHP: socket_recv() failed; reason: Success
Jquery代码:
$(document).ready(function() {
//create a new WebSocket object.
var wsUri = "ws://172.28.21.45:9000";
var websocket = false;
websocket = new WebSocket(wsUri);
$("#messageform").click( function(ev) {
ev.preventDefault();
var message = $("#message").val();
var packet = {
message: message
};
console.log(packet);
websocket.send(JSON.stringify(packet));
$("#message").val('');
});
websocket.onopen = function(ev) {
//ev.preventDefault();
$(".notification").html('<a href="messagearchive.php"><img src="images/bell.svg" width="25px;"/><br/><span style="color: green;">Connected</span> ');
}
websocket.onmessage = function(ev) {
ev.preventDefault();
}
websocket.onerror = function(ev) {
$(".notification").append('<p>Socket has error</p>');
}
websocket.onclose = function (ev) {
$(".notification").append('<p>Socket is closed</p>');
}
$(文档).ready(函数(){
//创建新的WebSocket对象。
var wsUri=“ws://172.28.21.45:9000”;
var-websocket=false;
websocket=新的websocket(wsUri);
$(“#消息表单”)。单击(函数(ev){
ev.preventDefault();
var message=$(“#message”).val();
var数据包={
信息:信息
};
控制台日志(数据包);
send(JSON.stringify(packet));
$(“#消息”).val(“”);
});
websocket.onopen=功能(ev){
//ev.preventDefault();
$(“.notification”).html(“
已连接”);
}
websocket.onmessage=函数(ev){
ev.preventDefault();
}
websocket.onerror=功能(ev){
$(“.notification”).append(“套接字有错误””);
}
websocket.onclose=功能(ev){
$(“.notification”).append(“套接字已关闭””);
}
})) 函数socket recv返回读取的字节数或错误时返回假 断开连接时,您将收到0个字节,并且您的
if
未检查此情况
我建议您稍微修改一下php阅读代码:
foreach($clients as $client) {
$bytes = socket_recv($client, $buf, 1024, MSG_DONTWAIT);
if ($bytes === false) {
echo "socket_recv() failed; reason: " .
socket_strerror(socket_last_error($socket)) . "\n";
} elseif ($bytes === 0) {
echo "Disconnection\n";
} else {
print_r($buff);
}
}
然而,这并不能解释为什么您不能读取数据 函数socket recv返回读取的字节数或错误时返回假 断开连接时,您将收到0个字节,并且您的
if
未检查此情况
我建议您稍微修改一下php阅读代码:
foreach($clients as $client) {
$bytes = socket_recv($client, $buf, 1024, MSG_DONTWAIT);
if ($bytes === false) {
echo "socket_recv() failed; reason: " .
socket_strerror(socket_last_error($socket)) . "\n";
} elseif ($bytes === 0) {
echo "Disconnection\n";
} else {
print_r($buff);
}
}
然而,这并不能解释为什么您不能读取数据