You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Socket连接URL报UnknownHostException与空指针异常咨询

问题结论

不需要优先修改Windows系统hosts文件,当前报错的核心原因是Socket初始化参数格式错误,和hosts配置无关。

报错原因拆解

  • 第一处报错java.net.UnknownHostException: https://socket.edu.net触发逻辑:Socket建立TCP连接时,主机名参数只接受纯域名/IP,不识别URL带的https://协议前缀。传入带前缀的字符串后,程序会把整个https://socket.edu.net当成主机名去做DNS解析,自然找不到对应IP,直接抛出主机未知异常。
  • 第二处报错java.lang.NullPointerException: Cannot invoke "java.io.DataInputStream.readLine()" because "this.input" is null是连锁问题:前一步TCP连接建立失败,绑定在连接上的输入流this.input没有完成初始化、值为null,此时调用readLine()方法就会触发空指针。

修复步骤

  1. 修正Socket初始化参数,去掉主机名里的协议前缀,同时确认服务端实际开放的Socket端口(和服务端配置保持一致即可),参考写法:
// 错误写法:主机名带协议前缀
// Socket socket = new Socket("https://socket.edu.net", 443);
// 正确写法:仅传入纯域名
Socket socket = new Socket("socket.edu.net", 443);
  1. 参数修正后重新测试连接,如果此时仍然抛出主机未知异常,再检查本机DNS是否能正常解析socket.edu.net域名。若DNS解析失败,再将该域名对应的正确IP添加到hosts文件(路径为C:\Windows\System32\drivers\etc\hosts),添加格式为[域名对应IP] socket.edu.net,修改hosts需要管理员权限。
  2. 补充连接异常捕获逻辑,确认Socket连接成功后再初始化输入、输出流,避免连接失败触发后续空指针。

Socket基础说明:
Socket支持同一设备或不同设备上两个独立进程间的通信,本质是借助标准Unix文件描述符与其他计算机通信的机制。Unix系统中所有I/O操作都通过读写文件描述符实现,文件描述符是与打开的文件关联的整数,可对应网络连接、文本文件、终端等对象。

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:01:08