Php socket_close()挂起我的客户端,直到服务器断开我的连接
这是我的php客户端代码:Php socket_close()挂起我的客户端,直到服务器断开我的连接,php,vb.net,sockets,client,Php,Vb.net,Sockets,Client,这是我的php客户端代码: <?php $service_port = 5310; $address = gethostbyname('192.168.40.100'); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) echo "socket_create() falló: razón: " . socket_strerror(s
<?php
$service_port = 5310;
$address = gethostbyname('192.168.40.100');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "<br />";
else
{
$result = socket_connect($socket, $address, $service_port);
if ($result === false)
echo "socket_connect() falló.\nRazón: ($result) " . socket_strerror(socket_last_error($socket)) . "<br />";
else
{
$in = "Envio esto: HOLA";
$out = 'RESPONSE: ';
echo "ANTES: " . date("H:i:s") . "<br />"; // #1
socket_write($socket, $in, strlen($in));
echo "DESPUÉS: " . date("H:i:s") . "<br />"; // #2 Same time as #1
// Leer/imprimir respuesta
while ($out = socket_read($socket, 2048))
echo "RESPONSE: " . date("H:i:s") . " " . $out; // #3 Same time as #2
}
}
// Cerramos socket
socket_close($socket);
echo "BANANA: " . date("H:i:s") . "<br />"; // Always run when I got disconected from server
?>
可能是您处于阻塞模式 试一试 连接后
这样,如果没有要读取的数据,您就不会挂起套接字并关闭,而不用等待服务器执行操作。您好,谢谢您的回答,但我需要收到服务器的响应,因此我想我必须使用阻塞模式。我将更新我的代码。一种解决方案是设置非阻塞,然后循环读取调用,因此如果从未从服务器收到任何数据,请重试读取。(然后设置一个自定义超时,或者在您停止尝试读取时进行另一次检查)。这是一个很好的解决方案,当到达de
socket\u close()
时,购买为什么我的php没有nonblock
挂起?您确定它挂起在socket\u close吗?你可以在socket_关闭之前尝试socket_shutdown($socket),socket_关闭会关闭套接字的发送和接收。现在一切正常,谢谢,我做得不好,现在我的代码已经修复,谢谢你。
<?php
$service_port = 5310;
$address = gethostbyname('192.168.40.100');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "<br />";
else
{
$result = socket_connect($socket, $address, $service_port);
if ($result === false)
echo "socket_connect() falló.\nRazón: (" . $result . ") " . socket_strerror(socket_last_error($socket)) . "<br />";
else
{
$in = "Envio esto: HOLA";
$out = '';
$response = "RESPONSE: ";
echo "PRIMERA;";
socket_write($socket, $in, strlen($in));
while ($out = socket_read($socket, 2048))
$response .= $out;
echo $response . ";SEGUNDA;";
$in = "close";
$out = '';
$response = "";
socket_write($socket, $in, strlen($in));
while ($out = socket_read($socket, 2048))
$response .= $out;
echo $response . " " . date("H:i:s");
}
}
socket_close($socket);
?>
socket_set_nonblock($socket);