簡體   English   中英

連接服務器超時android

[英]Connection to server times out android

我正在嘗試檢查服務器是否在android中處於聯機狀態。 我在按鈕onclick監聽器塊上有以下代碼:

                boolean exists = false;

            try {
                SocketAddress sockaddr = new InetSocketAddress("google.com", 80);
                // Create an unbound socket
                Socket sock = new Socket();

                // This method will block no more than timeoutMs.
                // If the timeout occurs, SocketTimeoutException is thrown.
                int timeoutMs = 2000;   // 2 seconds
                sock.connect(sockaddr, timeoutMs);
                exists = true;
            }catch(Exception e){
            }
            if ( exists == true) {
                Toast.makeText(getApplicationContext(), "Host is reachable!!! =)",
                        Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(getApplicationContext(), "Host is NOT reachable!!! =(",
                        Toast.LENGTH_LONG).show();
            }

事情是,無論我檢查的主機或IP,它總是脫機。

可能是什么問題呢?

我在androidmanifest中有這個權限:

    <uses-permission android:name = "android.permission.INTERNET"/>
<uses-permission  android:name="android.permission.ACCESS_NETWORK_STATE"/>

嘗試這個

InetAddress.getByName(host).isReachable(timeOut)

要么

boolean exists = false;

try {
    SocketAddress sockaddr = new InetSocketAddress(ip, port);
    // Create an unbound socket
    Socket sock = new Socket();

    // This method will block no more than timeoutMs.
    // If the timeout occurs, SocketTimeoutException is thrown.
    int timeoutMs = 2000;   // 2 seconds
    sock.connect(sockaddr, timeoutMs);
    exists = true;
}catch(Exception e){
}

我更喜歡使用HttpClient。 就像是:

getURL = "http://www.msftncsi.com/ncsi.txt"


HttpGet getHttp   = new HttpGet(getURL);
HttpParams httpParameters = new BasicHttpParams();

int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);

int timeoutSocket     = 3000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

HttpClient client = new DefaultHttpClient(httpParameters); 

HttpResponse responseGet = client.execute(getHttp);  
HttpEntity resEntityGet = responseGet.getEntity(); 

如果HttpEntity返回null,那么我假設沒有連接。

您必須使用try catch進行環繞,並假設在進入catch時沒有連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM