【问题标题】:Get Port of Incoming Request - App Engine, Java获取传入请求的端口 - App Engine,Java
【发布时间】:2014-04-20 14:56:54
【问题描述】:

我有一个在 Google App Engine 上运行的应用程序,并且客户端通过执行 HTTP POST(或 GET 或其他)请求的特定 URL 连接到服务器。我的问题很简单:我将如何获取客户端的端口?

感谢您在此提供的任何帮助!

--- 附加信息 ---

请注意,在大多数情况下,“客户端端口”= 客户端调制解调器的 NAT 设置的已转换端口。如果存在 NAT,我不需要客户端计算机上用于访问服务器的本地端口,因为这对我来说用处不大。相反,我需要来自调制解调器公共 IP 的端口,它将请求重定向到我的原始客户端。

我需要此信息在稍后的某个时间点(通过套接字)向客户端发送更多数据。在其初始发布请求之后,原始客户端立即创建一个服务器套接字,用于侦听来自服务器的请求。服务器只有知道客户端的 ip:port 才能向客户端发送请求。

我知道下面的问题请求。虽然它已经 3.5 年了,但仍然没有采取任何行动——它永远不会被修复。我希望这里的人可能知道解决方法。

https://code.google.com/p/googleappengine/issues/detail?id=4210&q=Type%3DDefect&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log&start=100

【问题讨论】:

  • 我无法想象你为什么需要这个,或者为什么你认为它甚至应该可用。为什么不能使用 GAE 的channel API 开启持久连接?
  • 我在问题中描述了为什么我需要这些信息。不幸的是,Chanel API 不适合每分钟的费率太严格了——我每秒只能为一个额外的客户提供服务,如果我真的要采用整个“可扩展”的想法,那么这不是一个好主意构建我的应用程序的方法。

标签: java google-app-engine port nat


【解决方案1】:

Afaik,远程 TCP 端口的信息无法通过 GAE API 获得。

大多数情况下,客户端都位于 NAT 之后,因此无法从 Internet 访问它们,即即使侦听端口打开,由于 NAT 转换的单向性质,您也无法与其建立 TCP 连接。

如果客户端有一个公共 IP,那么他们只需告诉服务器他们将监听哪个端口,然后您就可以使用 URL Fetch 或 Outgoing Sockets 建立连接。

【讨论】:

  • 如果我错了,请纠正我:如果我使用 keep alive 将翻译保存在 nat 表中,那么我就没有办法通过 nat 的翻译 ip 连接来到达客户端:港口?我很确定 NAT 转换是双向的——这不是 Web 服务器响应客户端通常请求的方式吗? @para3 问题是客户端没有公共 ip - 调制解调器有一个。如果以上任何一个错误,请告诉我!
  • 您只能从客户端通过 NAT 发起 TCP 连接,一旦建立连接,数据包就会双向流动。但是在您的情况下,一旦 HTTP 请求完成,TCP 连接就会关闭,所以我不相信 NAT 转换在 TCP 关闭后会起作用。此外,即使没有 NAT 并且如果 TCP 连接仍然正常,您仍然无法通过 TCP 连接注入随机数据包,至少不能从正常的应用程序代码中注入。
  • 重申一下:HTTP请求结束后,服务器关闭TCP连接,不能重用。您可以尝试在客户端保持打开状态(我不明白如何),但这没有任何意义,因为服务器将永远不会再次使用它。我建议阅读 TCP 的基础知识:en.wikipedia.org/wiki/Transmission_Control_Protocol
  • 哇,好久没上了。太长。如果你还在,我想说我确实读过,至少在某个地方,“关闭 TCP 连接”的定义是相当可疑的,并且 NAT 不会从他们的表中删除翻译,因为它们不能确保它真的终止了。另外,我的理解是,只要翻译还在,只需将数据包发送到调制解调器的 ip:port 就会将其重定向到 pc,那里会有一个套接字侦听和等待数据包。
  • “你仍然不能注入随机数据包......” - 我不相信我打算这样做。我认为Java“套接字连接”首先以某种方式为我“创建”连接,然后我使用输入流/输出流来发送/接收信息——所以这些是被发送的数据包。翻译的 nat 不会简单地转发所有通过的信息,从而导致初始“创建请求”也成功发送吗? “服务器关闭 TCP 连接” - 我计划在服务器稍后 ping 客户端时让套接字创建一个新的 TCP 连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多