java - ServerSocket是如何接收HTTP请求的?

标签 java http port serversocket

我使用套接字编程实现了简单的客户端-服务器程序。这是我的服务器代码片段,

ServerSocket listner = new ServerSocket(9000);
while(true){
Socket socket = listner.accept();
// here a new thread is spawn for each request Which prints 
// the data received from client using socket input stream
}

当服务器启动并且从浏览器访问 URL( http://localhost:9000 ) 时,我可以看到 HTTP get 请求打印在控制台上。

据我所知,HTTP 监听端口 80(即所有传入的 HTTP 请求都通过此端口发送)。我的问题是,为什么通过端口 9000 接收 http 请求。如果我使用的 URL 告诉我忽略(或可能绕过)端口 80?然后,如何使用监听标准 HTTP 端口:80 的套接字来实现服务器程序(我的意思是通过 htting URL http://localhost/ )。

最佳答案

虽然默认 HTTP 端口为 80,但您可以使用其他端口。事实上,其他端口也很常用,例如 8080 和更高的数字,这些端口与其他应用程序(电子邮件等)使用的标准端口号不冲突

您的示例之所以有效,是因为您正在监听端口 9000,由于这一行:

ServerSocket listner = new ServerSocket(9000);

您在浏览器中使用的相应 URL 是: http://localhost:9000

所以它明确告诉浏览器使用 9000 而不是 80。

如果您想使用 80,只需将 ServerSocket 构造函数中该行的端口号更改为 80,假设同一网络接口(interface)上没有其他东西正在使用端口 80。

关于java - ServerSocket是如何接收HTTP请求的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070391/

相关文章:

java - Android在代码中访问XML常量实际值

apache - 控制服务器上自定义文件的缓存过期

http - GoQuery 响应代码

ruby - 如何使用 ruby​​ 检查 Amazon S3 上的 URL 是否有效且未过期

linux - 将我的域名重定向到特定端口

java - 使java应用程序在PC启动时启动

java - 每次打开应用程序时都需要密码验证

java - 检查一个数字是否是两个数字的幂的函数的时间复杂度

http - 多个客户端如何同时连接到服务器上的一个端口,比如 80?

docker - 首次连接后docker容器端口关闭