";由于目标机器主动拒绝连接,所以无法进行连接;来自外部客户端


"No connection could be made because the target machine actively refused it." from external client

我有一个小型家庭服务器(Ubuntu+XAMPP)和两个PHP脚本:server.phpclient.php,它们都通过套接字进行通信。

当我在同一台机器(localhost)上运行server.php/client.php时,它工作得很好。此外,当我在服务器上运行server.php,在同一服务器上但从其他本地PC(即local_server_ip/client.php)运行client.php时,所有操作都很好。

但是,当我在服务器上运行server.php,在同一网络上的另一台PC上运行client.php(在client.php脚本中将localhost替换为local_server_ip_addr)时,它会失败,并出现actively refused connection错误。

所有必要的端口都在路由器中转发。我想这是XAMPP/Linux上的一种安全块,可以通过一些配置文件消除。我用httpd-xamp.conf文件中的Allow from all替换了New XAMPP security concept中的Deny from all,但它仍然失败。

任何帮助都将不胜感激。

(附言:服务器/客户端脚本示例取自http://i-novice.net/sokety-v-php/)

UPD:已将8080端口(我的系统中专用于套接字的端口)修改为XXXXX。一切都很好

如果这种情况可靠地发生,这实际上意味着机器存在,但它没有在预定端口上侦听的管理,或者有防火墙阻止您。

如果这种情况周期性发生(您"不时"使用),并且重试成功,则很可能是因为服务器"过多"。

当你在倾听附件中等待被认可时,你就处于一种准备状态。这种过多的数量是有限的,而且很短——1、2或3的估计并不奇怪——因此操作系统可能无法让你的请求"承认"吞噬。

构建是监听容量的一个参数——所有方言和阶段都以这种方式拥有基本相同的API,即使是C#。在您控制服务器的情况下,此参数通常是可配置的,并且可能是从一些设置文档或注册表中读取的。研究如何安排服务器。

在您编写服务器的情况下,您可能需要在附件的确认中进行大量准备,这可以更好地转移到另一个专业字符串中,这样您的确认就可以不断准备获得关联。您可以调查不同的结构工程决策,以缓解排队客户并依次处理他们的问题。

尽管您是否可以构建服务器构建,但您确实需要在客户代码中重试基本原理来适应这个问题,因为即使构建时间很长,服务器也可能会在那时对该端口产生不同的需求。

如果NAT交换机用于映射的端口被耗尽,那么NAT交换机出现这种错误的可能性很小。然而,我认为我们可以把这种可能性视为一个很大的可能性,因为交换机在疲劳之前与同一目的地位置/端口有64K个并发关联。