【问题标题】:How ServerSocket is able to receive HTTP requests?ServerSocket 如何能够接收 HTTP 请求?
【发布时间】:2018-10-30 18:08:44
【问题描述】:

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

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 获取请求。

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

【问题讨论】:

  • 默认端口是 80,但是浏览器可以使用任何端口,如果你愿意,你的服务器可以监听 80 端口。如果要使用 80 端口,请将 9000 替换为 80。

标签: java http port serversocket


【解决方案1】:

虽然 默认 HTTP 端口是 80,但没有什么能阻止您使用其他端口。事实上,其他端口也很常用,例如8080 和更高的数字,与其他应用程序(电子邮件等)使用的标准端口号不冲突

您的示例有效,因为您正在侦听端口 9000,因为这行:

ServerSocket listner = new ServerSocket(9000);

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

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

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

【讨论】:

  • 端口 80 在大多数 Unix 系统上具有特权。
  • @chrylis 与 OP 的问题无关(这是关于编程而不是操作系统)。但是您可以以sudo 的身份运行您的程序。运行ApacheNginx 或您的软件没有区别,它们在打开套接字时都做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2012-02-16
相关资源
最近更新 更多