gpt4 book ai didi

c# - 客户端强行关闭PHP套接字

转载 作者:行者123 更新时间:2023-11-30 21:58:50 32 4
gpt4 key购买 nike

我创建了一个 PHP 的套接字服务器。我使用 telnet 或 putty 连接到它并且一切正常,直到我尝试连接到 .Net 应用程序,每次我执行该应用程序时它都会关闭服务器,这是我的 C# 代码,只有两行:

System.Net.Sockets.TcpClient cli = new System.Net.Sockets.TcpClient("192.168.0.200", 10000);
cli.Close();

当我运行应用程序时,PHP 套接字服务器因以下错误而关闭:

Warning: socket_read(): unable to read from socket [0]: An existing connection was forcibly closed by the remote host

我尝试注释掉 Cli.close() 行,果然套接字保持打开状态,直到 C# 应用程序关闭,然后它将关闭并显示与上面相同的错误消息。

那么是什么导致了这个问题呢?客户端应该无法通过这种方式关闭套接字。

谢谢

最佳答案

查看 http://php.net/manual/en/sockets.examples.php 处的代码我没有看到任何问题。此代码在套接字关闭时存在脚本:

if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}

我的建议是修改代码如下:

if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break;
}

添加“@”将防止出现警告。将 break 2; 更改为 break; 将使服务器不退出,而是继续等待下一个连接。

如果这不起作用,那么您可以将整个脚本包装到另一个 do { } while() 循环中,以便每次套接字读取失败时 php do socket_create() 再次。

关于c# - 客户端强行关闭PHP套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29821010/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com