2015-05-20 25 views
3

我試圖連接到這樣的插座:運行Android Lollipop無線上網的插座java.net.ConnectException ETIMEDOUT

try { 
     Server = "192.168.0.10"; 
     port = 7000; 

     System.out.println("SOCKET: Create Socket: " + Server+ ":" + port); 

     socket = new Socket(Server, port); 

     System.out.println("SOCKET: Created Socket: "); 

     out = socket.getOutputStream(); 
     in = socket.getInputStream(); 
     return true; 
    } catch (IOException ex) { 
     System.out.println("SOCKET: CATCH: " + ex.getLocalizedMessage()); 
     return false; 
    } 

這工作我的Android 4.2設備上的罰款。如果我測試在Android棒棒糖(5.x的)相同的代碼,我會得到以下錯誤:

05-20 08:25:59.592: E/Con(8167): java.net.ConnectException: failed to connect to /192.168.0.10 (port 7000): connect failed: ETIMEDOUT (Connection timed out) 
05-20 08:25:59.592: E/Con(8167): at libcore.io.IoBridge.connect(IoBridge.java:124) 
05-20 08:25:59.592: E/Con(8167): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
05-20 08:25:59.592: E/Con(8167): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163) 
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.startupSocket(Socket.java:590) 
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.tryAllAddresses(Socket.java:128) 
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.<init>(Socket.java:178) 
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.<init>(Socket.java:150) 

在這兩種情況下,我的Android設備與通過WiFi相同的設備連接。有誰知道棒棒糖的問題?

謝謝!

編輯:解決方法: 嗯,我注意到一個奇怪的行爲:如果我關閉我的移動互聯網數據的Socket正在創建!但我只需要移動數據,所以它不是一個令人滿意的解決方案...任何想法如何創建與移動數據激活套接字?

回答

0

我們遇到了同樣的問題。我們解決了它這樣的:

ConnectivityManager conMan = (ConnectivityManager) Context.getSystemService(CONNECTIVITY_SERVICE); 
NetworkRequest.Builder nb = new NetworkRequest.Builder(); 
nb.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 

conMan.requestNetwork(nb.build(), new ConnectivityManager.NetworkCallback() { 

        @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
        @Override 
        public void onAvailable(Network network) { 
         Socket s = new Socket(); 
         network.bindSocket(s); 

         s.bind(new InetSocketAddress(server, port)); 
        } 
       }); 

使用Network.bindSocket(插座),你可以主動選擇你要使用該套接字網絡。這是必要的,因爲從棒棒糖開始,系統默認網絡是連接到互聯網的網絡。

+0

謝謝!我會在下週嘗試一下,並將其標記爲已解決!非常感謝你! – Wicked161089