Android NDK中socket的用法以及注意事項(xiàng)分析
第一部分: 創(chuàng)建socket并綁定IP和端口
#include <sys/select.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define MAX_DATA_BUF_LEN 10240
int sd = INVALID_SOCKET;
sockaddr_in addr_org; // 發(fā)送端地址
sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // 創(chuàng)建socket
addr_org.sin_family = AF_INET;
addr_org.sin_addr.s_addr = inet_addr("192.128.0.1"); // 發(fā)送端IP
addr_org.sin_port = htons(8080); // 發(fā)送端端口
bind(sd, (struct sockaddr *)&(addr_org), sizeof(struct sockaddr_in)); // 綁定IP和端口
第二部分: 發(fā)送數(shù)據(jù)
sockaddr_in addr_dst; // 接收端地址
addr_dst.sin_family = AF_INET;
addr_dst.sin_addr.s_addr = inet_addr("192.128.0.2"); // 接收端IP
addr_dst.sin_port = htons(8080); // 接收端端口
... // 生成要發(fā)送的數(shù)據(jù)到SendDataBuff, 長(zhǎng)度為ulLen
sendto(sd, SendDataBuff, ulLen, 0, (struct sockaddr *)&(addr_dst), sizeof(sockaddr_in)); // 發(fā)送SendDataBuff中的數(shù)據(jù)
第三部分: 在線程中接收數(shù)據(jù)(非阻塞式)
void *SocketReceiveThread(void *pParam)
{
fd_set fdset;
struct timeval delayval;
unsigned long lRetVal;
delayval.tv_sec = 0;
delayval.tv_usec = 5000; /*5ms延時(shí)*/
while (!end_flag)
{
FD_ZERO(&fdset);
FD_SET(sd, &fdset);
lRetVal = select(sd+1, &fdset, NULL, NULL, &delayval); // 尤其要注意第一個(gè)參數(shù)
if (0 == lRetVal)
{
continue;
}
else if (SOCKET_ERROR == lRetVal)
{
break;
}
else if (FD_ISSET(sd, &fdset) != 0)
{
char RecvDataBuff[MAX_DATA_BUF_LEN]; // 接收數(shù)據(jù)buffer
unsigned long ulLen = recvfrom(sd, RecvDataBuff, MAX_DATA_BUF_LEN, 0, NULL, NULL);
... // 處理接收到的數(shù)據(jù)
}
}
}
第四部分: 關(guān)閉socket
close(sd);
- Android Studio 導(dǎo)入開(kāi)源項(xiàng)目的正確姿勢(shì)及注意事項(xiàng)
- Android Studio3.0升級(jí)后使用注意事項(xiàng)及解決方法
- Android 程序執(zhí)行Linux命令的解決方法及注意事項(xiàng)
- 將Eclipse工程轉(zhuǎn)Android Studio工程的步驟與注意事項(xiàng)
- AndroidStudio升級(jí)到3.0的新特性和注意事項(xiàng)小結(jié)
- 詳解Android Service 使用時(shí)的注意事項(xiàng)
- Android 中ViewPager中使用WebView的注意事項(xiàng)
- Android TimerTask 的簡(jiǎn)單應(yīng)用及注意事項(xiàng)
- Android 如何使用log4j及注意事項(xiàng)
- Android集成百度地圖開(kāi)發(fā)流程和注意事項(xiàng)
- Android onNewIntent()觸發(fā)機(jī)制及注意事項(xiàng)
- Android Studio添加第三方庫(kù)的注意事項(xiàng)
- Android 程序申請(qǐng)權(quán)限注意事項(xiàng)
- Android Service自啟動(dòng)注意事項(xiàng)分析
- 關(guān)于Android WebView的loadData方法的注意事項(xiàng)分析
- Android生存指南之:開(kāi)發(fā)中的注意事項(xiàng)
- Android 編程下字庫(kù)的使用及注意事項(xiàng)
- 60條Android開(kāi)發(fā)注意事項(xiàng)與經(jīng)驗(yàn)總結(jié)
相關(guān)文章
Android游戲開(kāi)發(fā)實(shí)踐之人物移動(dòng)地圖的平滑滾動(dòng)處理
玩過(guò)rpg游戲的朋友應(yīng)該都知道RPG的游戲地圖一般都比較大 今天我和大家分享一下在RPG游戲中如何來(lái)處理超出手機(jī)屏幕大小的游戲地圖。2014-06-06Android 自定義標(biāo)題欄 顯示網(wǎng)頁(yè)加載進(jìn)度的方法實(shí)例
Android 自定義標(biāo)題欄 顯示網(wǎng)頁(yè)加載進(jìn)度的方法實(shí)例,需要的朋友可以參考一下2013-06-06Android實(shí)現(xiàn)簡(jiǎn)易記事本
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)易記事本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12使用DrawerLayout組件實(shí)現(xiàn)側(cè)滑抽屜的功能
DrawerLayout組件同樣是V4包中的組件,也是直接繼承于ViewGroup類,所以說(shuō)是一個(gè)容器類,下面通過(guò)本文給大家介紹使用DrawerLayout組件實(shí)現(xiàn)側(cè)滑抽屜的功能,感興趣的朋友一起看下吧2016-08-08Android開(kāi)發(fā)實(shí)現(xiàn)的Intent跳轉(zhuǎn)工具類實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的Intent跳轉(zhuǎn)工具類,簡(jiǎn)單描述了Intent組件的功能并結(jié)合實(shí)例形式給出了頁(yè)面跳轉(zhuǎn)、拍照、圖片調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Android應(yīng)用開(kāi)發(fā)中模擬按下HOME鍵的效果(實(shí)現(xiàn)代碼)
Android應(yīng)用開(kāi)發(fā)中, 有一種場(chǎng)景,就是我們不希望用戶直接按Back鍵退出Activity,而是希望應(yīng)用隱藏到后臺(tái),類似于按Home鍵的效果2013-05-05Android實(shí)現(xiàn)可以展開(kāi)的TextView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可以展開(kāi)的TextView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android中實(shí)現(xiàn)OkHttp上傳文件到服務(wù)器并帶進(jìn)度
本篇文章主要介紹了Android中實(shí)現(xiàn)OkHttp上傳文件到服務(wù)器并帶進(jìn)度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android編程實(shí)現(xiàn)短信收發(fā)及語(yǔ)音播報(bào)提示功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)短信收發(fā)及語(yǔ)音播報(bào)提示功能,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)短信的接收、發(fā)送以及相應(yīng)的語(yǔ)音播報(bào)提示功能相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Android學(xué)習(xí)小結(jié)之Activity保存和恢復(fù)狀態(tài)
這篇文章主要介紹了Activity狀態(tài)保存和恢復(fù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08