gpt4 book ai didi

java - 为什么 httpServletRequest.getLocalPort 总是返回与 getServerPort 相同的值?

转载 作者:行者123 更新时间:2023-11-28 22:58:41 31 4
gpt4 key购买 nike

所以我有一个非常简单的类,它扩展了 HttpServlet 类并实现了 doPost 方法。

我在 doPost 方法中有这个:

System.out.println("Remote port:" + httpServletRequest.getRemotePort());
System.out.println("Local port:" + httpServletRequest.getLocalPort());
System.out.println("Server port:" + httpServletRequest.getServerPort());

我打开 Internet Explorer 和 Chrome,并使用这两种浏览器尽可能快地访问这个 Servlet。我得到输出:

Remote port:51773
Local port:8080
Server port:8080
Remote port:51772
Local port:8080
Server port:8080

所以我可以看到 Chrome 和 Internet Explorer 从操作系统获取不同的 TCP 端口。 ( 773 和 772 )但为什么我的应用程序响应来自同一个本地端口的两个请求? TCP 不应该创建不同的端口并从那里响应吗?

同样在 HeadFirst JSP 和 Servlets 书中它说:

"There's a difference, because although the requests are sent to a single port (where the server is listening, the server turns around and finds a different local port for each thread so that the app can handle multiple clients at the same time"

那么为什么都是 8080?

最佳答案

But why is my application responding to both requests from the same Local Port?

因为这就是 TCP 的工作方式。

Should not TCP create different ports and respond from there?

没有。

Also in HeadFirst JSP and Servlets book it says:

"There's a difference, because although the requests are sent to a single port (where the server is listening, the server turns around and finds a different local port for each thread so that the app can handle multiple clients at the same time"

避开这本书的好理由。这是完全错误的。从同一个监听套接字接受的所有套接字共享其本地端口号。服务器根本不会“为每个线程转身并找到不同的本地端口”,这不是必需的,因为“应用程序可以同时处理多个客户端”。这已经由 TCP 保证。

So why both 8080?

见上文。

这是关于 TCP 的一个令人惊讶的普遍误解,但仍然是一个误解。

关于java - 为什么 httpServletRequest.getLocalPort 总是返回与 getServerPort 相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892507/

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