Java Socket客户端无法连接远程服务器问题求助
问题排查与解决方案
1. 服务端绑定地址错误
你当前服务端代码绑定了一个固定的IPv6地址,存在两个明显问题:
- 你填写的IP地址
2552:548:41aa:c3f0:563c:hgj9:8ca2:b3aa本身无效,IPv6地址仅支持十六进制字符(0-9、a-f/A-F),地址中的g、j、h属于非法字符,推测是你填写时混淆了本地地址的实际值 - 即使填写了正确的本地IPv6/IPv4地址,固定绑定本地网卡的单地址会导致服务端仅监听该地址的请求,无法接收其他网卡接口的访问请求。如果需要允许所有设备访问,应该监听所有可用网卡接口:
public static void main(String[] args) throws IOException { // write your code here System.out.println("Server Running..."); int port = 1020, backlog = 5; // 不指定绑定地址,默认监听所有网卡接口,兼容IPv4+IPv6 ServerSocket serverSocket = new ServerSocket(port, backlog); Server server = new Server(serverSocket); server.startServer(); }
2. 客户端连接地址配置错误
客户端代码里硬编码了和服务端绑定的同一个本地地址,这个地址仅在你自己的本机上有效,需要根据网络场景修改:
- 如果你的朋友和你在同一个局域网下,需要将客户端连接的地址改为你机器的局域网内网IP,可以在本机执行
ipconfig(Windows)或ip addr(Linux/Mac)查看本机内网IP,一般是192.168.x.x、10.x.x.x这类格式 - 如果你的朋友和你不在同一个局域网(跨公网访问),直接填写内网IP是无法连通的,需要额外做公网暴露配置
3. 端口与防火墙配置问题
你猜测的端口未开放是常见原因,需要做以下检查:
- 先确认你的服务端正常启动后,1020端口处于监听状态,可执行
netstat -ano | findstr 1020(Windows)或netstat -tulpn | grep 1020(Linux/Mac)验证 - 打开本机系统防火墙的1020端口入站规则,允许TCP协议的外部请求访问该端口
- 如果你使用了路由器,且需要跨公网访问,需要在路由器后台配置端口映射,将路由器公网IP的1020端口映射到你本机内网IP的1020端口;如果没有公网IP,可以使用内网穿透工具实现公网访问
临时测试方案
可以先关闭本机防火墙做连通性测试,验证通过后再重新开启防火墙并配置对应端口规则,避免长期关闭防火墙带来的安全风险。
内容的提问来源于stack exchange,提问作者Nicholas Whitley
相关产品推荐
相关产品推荐

