Socket通信时报错java.net.ConnectException: Connection refused

在调试Socket通讯时,利用花生壳进行域名解析,将固定的域名指定到具体的电脑主机上(电脑主机的IP地址可变)
当手机客户端使用模拟器模拟时,可以正常进行Socket通信。
当手机客户端为真机测试时且与主机处于同一WIFI连接下,如电脑开启随时WIFI,将手机客户端连入该WIFI。此时,电脑运行Java编写的Server端,同时在接入WIFI的手机客户端进行Socket连接时会报以下错误: (在服务端未开启时也会报Connect refused错误)

06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err: java.net.ConnectException: Connection refused
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.PlainSocketImpl.socketConnect(Native Method)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:334)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:194)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.Socket.connect(Socket.java:586)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.Socket.connect(Socket.java:535)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.Socket.<init>(Socket.java:427)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.net.Socket.<init>(Socket.java:210)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at com.sannas.sockettest.SocketUtil$1.run(SocketUtil.java:35)
06-02 10:52:31.300 11185-11469/com.sannas.sockettest W/System.err:     at java.lang.Thread.run(Thread.java:762)

at com.sannas.sockettest.SocketUtil$1.run(SocketUtil.java:35)指向的是代码中:mSocket = new Socket("sannas.imwork.net",20005);  
在网上查找原因一般都是指域名或端口号出现错误或端口未开启等问题,但经检查后,这些都是正确的。后经调试发现,手机不能与已进行域名转换(花生壳域名映射)之后的电脑主机连入同一WIFI(即用电脑开一个共享WIFI,手机再接入此WIFI),运行客户端的真机需要更改网络连接后(不接入电脑开启的WIFI)即可进行正常的Socket通信。具体原因不太清楚,还请大佬些告知。
更改网络后测试效果:

### 解决 `java.net.ConnectException: Connection refused` 异常的方法 当遇到 `java.net.ConnectException: Connection refused` 错误,通常意味着客户端尝试连接的服务端未监听指定的IP地址和端口组合,或者服务端主动拒绝了该连接请求。以下是几种可能的原因及其对应的解决方案。 #### 1. 检查目标主机和服务的状态 确认目标机器上的应用程序正在运行并绑定了正确的网络接口与端口号。如果是在Kubernetes集群环境中,则需确保Pod内部署的应用程序已成功启动,并且容器内的进程确实开启了预期中的通信端口[^2]。 #### 2. 使用Socket类验证连通性 可以通过编写简单的Java程序利用Socket API来进行基本的功能测试: ```java import java.io.IOException; import java.net.Socket; public class TestConnection { public static void main(String[] args) { String host = "your.server.address"; // 替换成实际的目标服务器地址 int port = 3308; // 替换成要检测的具体端口号 try (Socket socket = new Socket(host, port)) { System.out.println("Successfully connected to the server."); } catch (IOException e) { System.err.println("Failed to connect to the server:" + e.getMessage()); } } } ``` 这段代码会尝试建立TCP连接;若失败则抛出异常,从而帮助定位问题所在[^1]。 #### 3. 排除防火墙设置干扰 检查本地及远程系统的防火墙配置,确保它们允许必要的入站流量通过所使用的协议(通常是TCP)。对于Linux系统而言,可通过命令行工具如iptables或firewalld调整规则集[^3]。 #### 4. 审核安全组策略和其他网络安全措施 特别是在云平台部署场景下,还需审查实例所属的安全组设定以及其他任何影响网络可达性的机制,比如VPC路由表项等[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值