Java套接字连接异常问题(连接超时)

时间:2019-06-06 07:27:43

标签: java android sockets

一些背景:

我有一个使用3G或4G数据连接的Android应用。但它也连接到wifi热点,以在热点设备和应用之间传输一些数据。

我想做的事情:创建到此wifi热点的套接字连接,并通过此套接字发送/接收数据。

我添加了以下代码,以确保在创建套接字时使用wifi热点wifi(否则有时会使用数据连接结束):

android.net.wifi.WifiManager wm = (android.net.wifi.WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

这似乎很好。但是,尝试连接到远程服务器地址时出现问题。这是我正在使用的代码:

InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
InetAddress localAddress = InetAddress.getByName(ip);
socket = new Socket(serverAddr,SERVERPORT,localAddress,0);

我正在使用一个套接字调用,该套接字调用从本地地址(如上获得的wifi连接wifi地址)连接到远程服务器地址。我将本地端口设置为0,因为这将允许套接字选择任何本地可用端口。但是,执行此操作时,始终会出现连接超时错误。

java.net.ConnectException: failed to connect to /A.B.C.D (port 3003) from /A.B.C.E (port 48492): connect failed: ETIMEDOUT (Connection timed out)

我确定服务器套接字代码没有问题,因为如果不使用本地地址,我就可以连接到服务器。以下代码始终有效:

InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
                socket = new Socket(serverAddr, SERVERPORT);

但是,我不能始终使用它,因为我希望同时打开数据和wifi,并且上面的代码不能保证它将始终使用wifi连接进行连接。 (实际上很少起作用)

我也尝试过手动绑定到本地wifi IP地址和一些随机端口。然后进行套接字连接。但这也不起作用。

我最初以为如果使用一次,端口号将无法正确关闭。但是后来我注意到,即使我是第一次打开该应用程序,也经常会发生此问题。我什至尝试将端口设置为0(临时端口),以确保它可以拾取任何可用的端口。

任何建议。如果有解决此问题的更好方法,请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:0)

确保运行智能手机,并且计算机连接到同一Internet连接! (即:智能手机可能正在使用4G或自己的网络,而计算机可以在wifi上