如果在远程服务器机器上运行应用程序,TCP连接将被终止——这是一种奇怪的行为

本文关键字:一种 终止 服务器 机器 运行 连接 TCP 应用程序 如果 | 更新日期: 2023-09-27 18:00:39

所以,我知道这个问题会有点"模糊",因为我真的不能给你任何关于这个问题的代码示例,但我会尝试解释这个问题,也许有人会认出它。

基本上,我有两个应用程序,都是用C#编写的。

[应用程序A]通过TCP套接字连接到[应用程序B]并发送数据,[应用程序B]当然可以在同一TCP连接上将数据发送回[应用程序A]。[应用程序B]是一款已经使用了6-7年的应用程序,在"生产服务器"上运行良好。

问题是:

如果我在本地机器上运行[App A]和[App B],它们之间的通信会正常工作。

但是,如果我在服务器/远程机器上运行[App A]和[App B](两者都在同一台机器上运行,但都在远程服务器上运行),那么它们之间的通信就无法正常工作。然后[App A]连接并设法将数据发送到[App B],[App B'相应地做出反应并将回复发送到[Ap A],但[App A'从未收到回复,相反,我看到TCP连接被终止。

如果我在本地机器上运行完全相同的代码,就不会发生

现在,如果我在本地机器上运行[App A],并且[App A]连接到远程/服务器机器上的[App B],那么它也可以按预期工作,即通信工作,TCP连接保持活动。

如果我让[App B]继续在远程服务器上运行,而是在远程服务器(而不是我的本地机器)上启动[App A],那么它就无法再次工作;在[App A]发送其数据之后,TCP连接被终止。

在我看来,这不是代码的问题,因为它在本地工作,如果我在不同的机器上运行应用程序,对吧?

我在两台机器上都运行Windows,在本地运行Win 7,在远程/服务器机器上运行Win Server 2003,使用.NET 4.0。

这有什么意义吗?

如果在远程服务器机器上运行应用程序,TCP连接将被终止——这是一种奇怪的行为

这听起来很像运行应用程序A的服务器有一个本地防火墙设置或一个物理防火墙,阻止来自应用程序B服务器的入站连接。

检查您正在侦听的端口是否允许连接类型(TCP或UDP)的入站连接。

因为没有太多事情可做,所以要在黑暗中保持冷静。我的随机猜测是,应用程序A或应用程序B使用的端口之一正在服务器/远程机器上使用。相同的端口可能在您的本地计算机上免费提供,因此您不会观察到相同的行为。