多语言展示
当前在线:197今日阅读:168今日分享:49

android ndk 网络编程

最近一段时间不断的有朋友问我有没有android ndk相关的网络编程的测试用例或者资料,网上基本上又没有,本文主要:       ① 不是android上Java网络编程;       ② 不仅仅是liunx上网络编程;       ③ 就连android ndk官方提供的测试用例也没有网络编程方面的资料;       ④ 同时设计windows上服务器,android ndk上客户端的配置;       ⑤ 本文是在android上的纯c/c++开发环境下进行的,不会设计Java代码;      android ndk 如何进行网络编程?android ndk层进行网络编程,代码部分跟linux上的网路类似,但是android ndk的难度却不在编码部分,而是在环境配置方面,本文将介绍如何来配置,如何来编写android ndk的网络部分,以便可以跟windows端的一个服务器测试程序进行通讯,本文档的重点放到了流程上面;     方便他人亦是方便自己,如果觉得还行就点下右边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!     代码和视频的百度云链接:http://pan.baidu.com/s/1dDGhu3f 密码:dv72     注:由于优酷对视频进行了压缩,特将高清版放到百度云
工具/原料
1

Win7 x64

2

adt-bundle-windows-x86_64-20140702

3

android-ndk-r10

准备工作

由于本文是在”android 纯c/c++开发“的测试用例上进行二次开发,所以没有测试用例的朋友可以看链接:http://jingyan.baidu.com/article/a501d80cf394dfec630f5e85.html

windows服务器端
1

完整的代码:#include #include #pragma comment(lib, 'Ws2_32.lib')#define FK_PORT 10000int main(){ WSADATA wsaData = {0}; int nRet = WSAStartup(MAKEWORD(2,2), &wsaData); SOCKET sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); sockaddr_in sockAddr = {0}; sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = INADDR_ANY; sockAddr.sin_port = htons(FK_PORT); nRet = bind(sockServer, (SOCKADDR*)&sockAddr, sizeof(sockaddr_in)); nRet = ::listen(sockServer, SOMAXCONN); int nSockAddr = sizeof(sockaddr_in); SOCKET sockClient = ::accept(sockServer, (SOCKADDR*)&sockAddr, &nSockAddr); char szMsg[1024] = {0}; nRet = recv(sockClient, szMsg, sizeof(szMsg), 0); printf ('recv: %s\n', szMsg); shutdown(sockClient, SD_BOTH); closesocket(sockClient); shutdown(sockServer, SD_BOTH); closesocket(sockServer); WSACleanup(); return 0;}

2

由于本文的重点在android ndk上面,所以这里对于windows服务器的部分仅仅给出源代码;

android ndk客户端
1

① 增加一个 User Permssion② 设置 Name:android.permission.INTERNET

2

在 NativeTest.cpp 文件前面增加头文件:#include #include #include #include #include #include #include

3

在函数 onInputEvent 中插入代码: int sockClient = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in sockAddr = {0}; sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = inet_addr('192.168.0.101'); sockAddr.sin_port = htons(10000); int nRet = connect(sockClient, (sockaddr*)&sockAddr, sizeof(sockaddr_in)); char szMsg[1024] = 'fukeainideren'; nRet = send(sockClient, szMsg, strlen(szMsg), 0);注:不同的电脑服务器的ip地址不同

4

运行后的结果:

5

方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

推荐信息