gpt4 book ai didi

java - 如何使用指定端口号发送Java HTTP请求

转载 作者:行者123 更新时间:2023-12-01 10:58:18 28 4
gpt4 key购买 nike

我有两个应用程序需要使用 HTTP 相互通信。当前每个服务器都是使用 HttpServer 的服务器类并使用 Apaches HTTP client library 发出请求。

其中一个应用程序在运行之前将了解其他端口地址,例如端口 8000 意味着它使用此端口发出可由其他应用程序处理的 HTTP get 请求。但是,如果第二个应用程序想要向第一个应用程序发送请求,它将不知道将响应发送到哪个端口。发生这种情况是因为第一个应用程序将使用 HTTP 客户端库发送请求,该客户端库将动态选择端口,例如端口 6543,这意味着第二个应用程序无法保存该端口并在以后使用它。

示例:

应用程序 1 通过端口 8000 在本地主机上加载。

应用程序 2 通过端口 8050 在本地主机上加载。

应用程序 1 知道应用程序 2 在 8050 上,并发送请求,该请求由应用程序 2 处理。

应用程序 2 想要向应用程序 1 发送请求,但它不知道其端口,因为之前的请求是使用动态分配的端口发送的。

除了第一个应用程序将其服务器端口号发送到该应用程序之外,还有其他解决方案吗?

最佳答案

我不确定你到底想做什么。如果客户端发送 HTTP 请求,它实际上可以从同一个连接读取响应,为什么要通过不同的连接发送它并产生开销。如果你想实现它,那么除了客户端-服务器交换其请求响应的端口信息并且它们都充当客户端+服务器之外,没有其他办法。可以使用请求中的 HTTP header 来交换此信息。

我相信您对 TCP 和 HTTP 端口感到困惑。

However the second application will get the request, process it and not know which port to send the response to because the HTTP client library will dynamically select a port, e.g. port 6543

您的服务器不仅仅是选择一个动态端口来发送响应,它还是用于发送响应的底层 TCP 任意端口。 TCP 通常是与 HTTP 协议(protocol)一起使用的底层传输协议(protocol)。 TCP 客户端发送一个名为“客户端端口”的 header 来告诉服务器他们想要在哪里接收响应。这些端口号是客户端从一系列免费端口中随机选择的。

关于java - 如何使用指定端口号发送Java HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488078/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com