0
我試圖通過套接字連接2個Android設備,但爲什麼它不工作?我試過用IP地址替換主機地址,但沒有成功。(Java/Android)客戶端套接字拋出IOException
服務器端(擴展的AsyncTask):
ServerSocket server;
int port;
String hostName
server = new ServerSocket(0);
port = server.getLocalPort(); //is sent to client via OR code
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
hostName = inetAddress.getHostName(); //is sent to client via OR code
}
}
}
Socket client = server.accept();
客戶端(擴展的AsyncTask):
SocketAddress socketAddress = new InetSocketAddress(serverHostName, serverPort);
client = new Socket();
client.bind(null);
client.connect(socketAddress, SOCKET_TIMEOUT); //exception happens in this method
connected = true;
這裏是堆棧跟蹤:
11-08 03:02:38.050: W/System.err(26424): java.net.SocketTimeoutException: failed to connect to /fe80::b652:7dff:feb5:ece2%wlan0%7 (port 54579) after 10000ms
11-08 03:02:38.090: W/System.err(26424): at libcore.io.IoBridge.connectErrno(IoBridge.java:150)
11-08 03:02:38.090: W/System.err(26424): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-08 03:02:38.120: W/System.err(26424): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-08 03:02:38.160: W/System.err(26424): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
11-08 03:02:38.210: W/System.err(26424): at java.net.Socket.connect(Socket.java:848)
11-08 03:02:38.210: W/System.err(26424): at com.example.virtualcard.QRInternetClientThread.doInBackground(QRInternetClientThread.java:55)
11-08 03:02:38.220: W/System.err(26424): at android.os.AsyncTask$2.call(AsyncTask.java:264)
11-08 03:02:38.220: W/System.err(26424): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-08 03:02:38.220: W/System.err(26424): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-08 03:02:38.230: W/System.err(26424): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
11-08 03:02:38.230: W/System.err(26424): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-08 03:02:38.230: W/System.err(26424): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-08 03:02:38.230: W/System.err(26424): at java.lang.Thread.run(Thread.java:856)
你確定兩個Android設備在同一個網絡上嗎? – RenniePet 2014-11-08 04:06:37
我已經解決了這個問題。事實證明,我應該使用的代碼,我會在套接字創建之前在客戶端的答案中發佈,並且我不得不改變這個東西來處理IP地址而不是主機名。 – cruelcore1 2014-11-08 04:15:47