java - ServerSocket 如何能够接收 HTTP 请求?
问题描述
我已经使用套接字编程实现了简单的客户端-服务器程序。这是我的服务器代码片段,
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/)。
解决方案
虽然默认HTTP 端口是 80,但没有什么能阻止您使用其他端口。事实上,其他端口也很常用,例如8080
与用于其他应用程序(电子邮件等)的标准端口号不冲突的更高端口号。
由于这一行,您的示例有效,因为您正在侦听端口 9000:
ServerSocket listner = new ServerSocket(9000);
您在浏览器中使用的相应 URL 是: http://localhost:9000
所以它明确告诉浏览器使用 9000 而不是 80。
如果您想使用 80,您只需在ServerSocket
构造函数中将端口号从该行更改为 80,假设没有其他东西已经在同一网络接口上使用端口 80。
推荐阅读
- r - R:从 R 图中删除“边界”
- audio - 如何在需要时加快音频速度,然后在 ALSA 下恢复正常速度?
- java - 解析 YAML - 使用正确的子类型实例化列表中的元素,而不使用 YAML 标签?
- javascript - 使用角度 ts 对出现次数进行分组和计数
- javascript - 如何在 HTML 中动态嵌入 pdf(本地存储在浏览器中)?
- javascript - 使用 AWS Cognito 对 Hasura 进行身份验证时出错
- safari - 可以通过从 Safari 应用程序扩展调用 Process() 来启动可执行文件吗?
- mysql - Sequelize & mysql:自动添加子句`[tableName].deleted_at IS NULL`
- azure - 用于将 Azure SQL 数据库连接到 Power BI 的凭据
- sql - 高效的 Django 查询过滤前 n 条记录