導航:首頁 > 操作系統 > android設置網路超時時間設置

android設置網路超時時間設置

發布時間:2023-04-23 17:39:01

android Socket通信如何設置超時時間

今天太閑了,實在是一個寫博客的好日子! 其實關於這個問題可能用到的人不會很多,不過我在這里還是說說。 正常很多人寫socket通信時,都會直接通過new socket(IP,PORT)直接去鏈接伺服器。其實這種做法也沒岩蔽純有錯誤,但是若當服務並耐器IP不存在會伺服器沒有響應時,程序會卡在這句代碼老長一段時間,才會跳出並報異常粗咐。這對於這種問題,通過設置連接超時時間可以進行解決: socket = new Socket(); SocketAddresssocAddress = new InetSocketAddress(this.netAdress, this.port); 5000就是你所設置的超時時間!

㈡ 如何在android下採用相對時間,實現超時等待的功能

一、函數功能說明

pthread_cond_timedwait 等待一個條件變數,或者超時就會返回

POSIX有兩種時鍾類型

1、CLOCK_REALTIME: 系統范圍內的實時時鍾,是個時鍾,可以通過命令等方式修改該系統時間.
2、CLOCK_MONOTONIC:系統起機時到現在的時間,不能被設置和修改.

pthread_cond_timedwait()在沒有設置條件變數屬性的時候,默認用的是CLOCK_REALTIME時間,
因此在極端情況下會出現實際等待的時間與設置的超時時間不同。
所以,對於linux的超時等待功能,最好是使用CLOCK_MONOTONIC進行實現,並且通過pthread_condattr_setclock實現。

而對於android系統而言,是不支持pthread_condattr_setclock,通過驗證可以採用函數pthread_cond_timedwait_monotonic實現。

下面直接給出代碼的實現功能。

二、超時等待功能

[cpp] view plain
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/times.h>
#include <unistd.h>
#include <time.h>

static pthread_mutex_t s_mut = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_cond = PTHREAD_COND_INITIALIZER;

void PthreadAttr_Init(void);
unsigned long long getSysTime(void);
void waitTimeout(void);

void PthreadAttr_Init(void)
{
#if defined(ANDROID)

#else
pthread_condattr_t cattr;
int iRet = -1;
iRet = pthread_condattr_init(cattr);
if (iRet != 0)
{
return;
}
pthread_mutex_init(s_mut, NULL);
pthread_condattr_setclock(cattr, CLOCK_MONOTONIC);
pthread_cond_init(s_cond, cattr);
pthread_condattr_destroy(cattr);
#endif
return;
}

void waitTimeout(void)
{
unsigned long long ullbefore = getSysTime();
unsigned long long ullafter = 0;

#if defined(ANDROID)

#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC) // 支持ANDROID下NDK的編譯,採用相對時間
struct timespec outtime;
memset(outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, outtime);
outtime.tv_sec += 2;
pthread_mutex_lock(s_mut);
pthread_cond_timedwait_monotonic(s_cond,s_mut, outtime);
pthread_mutex_unlock(s_mut);
ullafter = getSysTime();
printf("####01 interval[%lld] ms\n", ullafter - ullbefore);
#else //支持ANDROID下NDK的編譯,採用絕對時間
struct timeval now;
struct itmespec outtime;
gettimeofday(now, NULL);
outtime.tv_sec = now..tv_sec + 3;
outtime.tv_nsec = now.tv_usec * 1000;
pthread_mutex_lock(s_mut);
pthread_cond_timedwait(s_cond, s_mut, outtime);
pthread_mutex_unlock(s_mut);
ullafter = getSysTime();
printf("####02 interval[%lld] ms\n", ullafter - ullbefore);
#endif

#else // 支持LINUX下的編譯,採用絕對時間
struct timespec outtime;
memset(outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, outtime);
outtime.tv_sec += 4;
pthread_mutex_lock(s_mut);
pthread_cond_timedwait(s_cond, s_mut, outtime);
pthread_mutex_unlock(s_mut);
ullafter = getSysTime();
printf("####03 interval[%lld] ms\n", ullafter - ullbefore);
#endif
return;
}

unsigned long long getSysTime(void)
{
unsigned long long milliseconds = 0;

struct tms t_tmsTime;
clock_t t_CurTime;
static int s_clks_per_sec = 0;

if (s_clks_per_sec == 0)
{
s_clks_per_sec = sysconf(_SC_CLK_TCK);
}

if (s_clks_per_sec == 0)
{
return 0;
}

t_CurTime = times(t_tmsTime);

if (1000 % s_clks_per_sec == 0)
{
milliseconds = (1000 /s_clks_per_sec)*(unsigned long long )t_CurTime;//換算成毫秒
}
else
{
milliseconds = 1000 * (unsigned long long )t_CurTime/s_clks_per_sec;//換算成毫秒
}

return milliseconds;
}

int main(void)
{
PthreadAttr_Init();
waitTimeout();
return 0;
}

編譯命令:
gcc test_ptthrad_conf_timewait_monotonic.c -o test_ptthrad_conf_timewait_monotonic -lpthread -lrt

linux下的測試結果:
####03 interval[4010] ms

㈢ 如何設置android HttpPost 連接伺服器超時

// 根據內容來源地址創建一個Http請求
HttpPost request = new HttpPost(SERVER_URL);
//設置請求超時
int timeoutConnection = 3 * 1000;
HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);
//設置響應超時
int timeoutSocket = 5 * 1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// 發送請求並獲取反饋
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse httpResponse = httpClient.execute(request);

閱讀全文

與android設置網路超時時間設置相關的資料

熱點內容
程序員面試經歷 瀏覽:983
蘋果怎麼設置app只用數據 瀏覽:855
學以為己pdf 瀏覽:231
為什麼安卓手機進步很大 瀏覽:342
mfc軟體加密 瀏覽:326
ubuntu上傳文件命令 瀏覽:712
合約馬丁格爾源碼 瀏覽:971
慕課文件夾名稱 瀏覽:671
用app國潮手帳怎麼做 瀏覽:254
解壓娛樂編輯器 瀏覽:615
wppdf 瀏覽:265
sshlinux文件下載 瀏覽:175
使用ping命令檢查網路問題 瀏覽:751
金手指文件放哪個文件夾 瀏覽:44
想創app軟體怎麼操作 瀏覽:200
為啥電腦總是顯示沒有文件夾 瀏覽:674
iphone顯示無法驗證app怎麼回事 瀏覽:968
推薦解壓好游戲 瀏覽:277
cpu伺服器過載怎麼辦 瀏覽:620
zip內存壓縮 瀏覽:313