我编写了一个应用程序,其中必须将客户端直接相互连接并保持连接。在使用高级技术(google)进行一些研究后,我发现我需要的东西可以通过NAT-Punching或NAT-Traversal来实现。大多数人似乎通过UDP使用NAT-Punching,但就我而言,我需要使用TCP(这是事实,在有人问“为什么不使用UDP?”之前),但我找不到任何这个或至少一个适当的教程的示例代码。所有我能找到的理论附件在哪里,但没有关于套接字或TCPClient的东西(我更喜欢套接字。)。有人可以给我链接一些示例代码,我可以使用这些示例代码连接两个位于NAT后面的客户端,或者可以将我链接到带有示例代码的完整教
我惊讶地发现Azure强制执行静默TCP连接超时,默认设置为4分钟。我需要更改此设置,因为我们正在运行长时间运行的TCP连接,不应发送任何通信以节省嵌入式设备的电量。有几个在线指南(https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/),但它们都涵盖了使用服务管理器(Classic)配置VM的情况。因此,在Classic中更改它不是问题,但我们已经在运行通过资源管理器配置的VM。运行后:Switch-AzureModeAzureResourceManag
我有一台在Azure云中运行WindowsServer2012R2的虚拟机。这台机器有静态分配的私有(private)和公共(public)IP地址。在那台机器上,我正在运行client应用程序(具体来说是JenkinsAgent)。此客户端打开到其服务器(JenkinsMaster)的TCP连接,该服务器在Azure云之外运行(在某些公共(public)IP地址之后)。TCP连接建立正常。为了保持此连接有效,客户端和服务器每4-5分钟相互“ping”一次。这种“ping”是通过打开的TCP连接交换几个TCP包来完成的。经过某个随机时间间隔后,客户端无法再连接到服务器,服务器也无法再连
在过去的几天里,我一直在研究一个在线游戏,一个2人游戏,其中一个启动服务器(在特定端口上监听),另一个通过输入他的IP连接到他。这种方法有两个问题:输入对方IP很不舒服。服务器不能位于路由器后面,因为NAT会阻止它工作。第一个问题可以通过匹配服务来解决,该服务可以在用户不关心的情况下处理IP地址。但是我不确定如何解决第二个问题。我读过“TCPholepunching”,但根据我读到的内容,当两个玩家都在路由器后面时,不可能执行此操作。如果这是真的,那么像Halo3这样由其中一名玩家担任主持人的匹配服务游戏如何运作?提前致谢。 最佳答案
我有一台windows7机器,我在上面安装了VirtualBox,我在其中运行Ubuntu虚拟机。在那个Ubuntu虚拟机上,我安装了cassandra并让它在默认端口9042上运行。我已经为该端口配置了virtualBox的端口转发。当我尝试使用虚拟机中的客户端连接到我的cassandra实例时,一切正常。但是如果我尝试从我的主机(我的实际计算机,Windows7)连接到它,我不能!当我在我的UbuntuVM上使用tcpdump时,它会显示:14:22:29.340202IP10.0.2.2.63128>10.0.2.15.9042:Flags[S],seq606528001,win
我正在尝试用Java为数据收集项目开发服务器端程序。架构如下:我有一个远程电子设备,它定期收集数据并将其发送回服务器。该设备配备了一张已激活GPRS连接的SIM卡,因此可以将其视为一台可以上网的电脑。在将数据发送回服务器之前,它必须知道服务器的IP地址。因为通过我的ISP获得静态IP太贵了,所以我决定尝试动态DNS(DDNS)。我已经在我的PC上安装了DDNS客户端,并在我的路由器中配置了端口转发,如下所示:ExternalPortStart:33333ExternalPortEnd:33333Protocol:TCPInternalPortStart:33333InternalPor
上下文:每个客户可以在NAT后面拥有100-1000个物联网设备。我们有多个客户。目的是从外部管理这些设备。设备使用CoAP协议(protocol),默认使用udp。限制很少。无法激活端口转发。无法打开VPN连接。无法对IoT设备的本地网络进行任何更改。问题我们想随时从外部打开与设备的连接。但是有NAT阻止它。选项据我了解,设备必须打开初始请求才能进行通信。关于可扩展性和效率,以下哪个选项是最好的?每个节点发送udpping以保持NAT连接打开。每个节点使用TCP并发送keepalive以保持NAT连接打开。每个节点都使用udp与NAT后面的本地代理进行通信。代理执行从coap到htt
我正在创建一个应用程序,它通过tcp连接监听来自不同应用程序(客户端)的连接(服务器)。因此,如果两个应用程序位于同一网络上,则建立连接将很容易。所以我正在尝试向服务器添加一种方法,以便用户在通过互联网使用该应用程序时不必打开其路由器上的端口即可运行该应用程序。所以让我向您展示几个不同的场景:1)--------------------------------------------------SCENARIO_1--------------------------------------------------------------服务器是家里的一台电脑。该计算机连接到路由器,该路
我正在尝试使用Android客户端和Java服务器设置客户端/服务器模型。连接通过TCP。当android设备连接到WIFI时,我的所有代码都可以正常工作,但是每当我连接到无线网络(例如3g、4g)时,套接字都拒绝连接。我一直在阅读有关NAT遍历的信息,但我不确定在实现允许连接的必要步骤时从哪里开始。注意:我的服务器有一个静态IP地址 最佳答案 我猜你遇到了与网络相关的问题。假设你的服务器在路由器后面,你的服务器套接字必须绑定(bind)到它的LANIP(而不是直接绑定(bind)公共(public)互联网IP)。然后您需要设置端口
I'vereadNAT路由器“如果在特定时间段内没有发送数据,则假定连接已终止。”I'vealsoreadTCPkeepalive数据包通常不应包含任何数据。所以我的问题是:以上说法是否正确?NAT路由器在重新排序/清理它们的表时是否考虑空的TCPkeepalive数据包?我问这个是因为我需要两个端点之间的可靠连接,它们都必须能够检测到连接问题并使用react。我知道我可能只是自己实现了一个keepalive机制,但我想知道TCP实现是否可以用于此目的。 最佳答案 我相信第二个陈述是指有效载荷(最短的TCP/IP数据包长度为40字节