我编写了一个服务器/客户机应用程序,首先在本地运行,然后在Internet上运行。因此,我将路由器配置为接受端口xxxx上的数据,并将其转发到我的机器上,在那里我的服务器运行,并接受来自客户端套接字的连接。所以一切都运行得很好,客户端可以在那里互相发送消息。所以现在我的问题是,服务器怎么可能发送数据到其他网络中的客户端,在那里端口转发没有被激活,但当我手动尝试它时,它不起作用。
我已经试着搜索了TCP是如何保存IP和端口的,我也查阅了Internet/TCP/UDP的概念是如何工作的,但是没有找到这个问题的答案。
所以首先,我想知道,在我实现没有端口转发的服务器之前,如果您有任何想法,可以给出windows上C++的代码示例,这样我就可以在没有端口转发的情况下建立这样的连接,并在Internet上建立外部服务器主机。
Clint -> NAT (router) -> ... -> NAT (router) -> server
当客户端发送消息(在TCP情况下可以是连接尝试,在UDP情况下可以是消息)时,它的NAT不会阻止它,并记住它来自哪个本地地址:端口,到达哪个地址:端口:[客户端地址:端口,服务器地址:端口]
。当消息到达服务器的NAT时,NAT会知道您的服务器,因为您配置了“端口转发”并将消息传递到本地网络。现在,当服务器将消息发送回客户端并且消息到达客户端的NAT时,NAT检查其内部表,找到此特定服务器地址:port
的记录,检索客户端地址:port
部分并将消息传递给它。所以一切都按预期进行。
这就是为什么通常当您打开浏览器并转到某个web链接时,尽管您处于NAT之后,您仍然会收到带有web页面的服务器响应而没有任何问题的原因。
这是一个简化的解释,省略了本地/全局地址:端口详细信息。
问题内容: 我在两个Java应用程序之间建立了一个套接字TCP连接。当一侧关闭插槽时,另一侧保持打开状态。但我希望将其关闭。而且我也迫不及待想看看它是否可用,然后关闭它。我想要某种方式从一侧完全关闭它。我能做什么? 问题答案: TCP不能像这样工作。操作系统将不会释放资源,即文件描述符以及端口,直到应用程序显式关闭套接字或死掉,即使TCP堆栈知道另一端已将其关闭。从对等方收到FIN后,从内核到用户
问题内容: 在Java中,可以创建套接字服务器和套接字客户端,是否可以运行套接字服务器的实例以及从同一台计算机上的套接字服务器接收数据的套接字/服务器客户端? 例如,套接字服务器在端口60010上运行,套接字客户端在通过套接字连接到该端口的同一台计算机上运行,还是我需要一台新计算机并将其添加到网络中?如果它在TCP / IP层上运行时具有唯一的IP地址和端口号。 问题答案: 这是一个简单的可运
我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput
我正在用java开发一个ServerSocket,我想知道,在客户端连接时,是否有可能将客户端/套接字发送到另一个ServerSocket。例如,一个客户端连接到123.41.67.817(只是一个随机IP),在连接时,客户端被直接发送到例如124.51.85.147(另一个随机IP),当然还有一个端口。所以一个会发生什么的小地图。 服务器套接字(侦听连接)< br> 客户端- 这有可能吗?抱歉问
null 我正在使用TcpReceivingChannelAdapter和TcpSendingMessageHandler与TcpNetClientConnectionFactory协作。 和IntegrationFlow来动态生成这些连接。 如何为TcpNetClientConnectionFactory创建多个都指向同一主机和端口的套接字?
如何处理多个客户端连接到一个服务器?我有这个logserver.java 和一个嵌入式applet,其中包含如下所示的部分代码,例如 现在的问题是,如果我在服务器上运行“Java日志服务器”,它将打开应用程序并等待输入流,如果我打开我的站点,它将开始流日志。但如果我使用其他计算机/网络再打开一个站点,第二个站点不会记录流。似乎是因为第一个仍然绑定到端口5000。 我该怎么处理?socket实际上是