我使用套接字编程实现了简单的客户端-服务器程序。这是我的服务器代码片段,
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/