Android NDK Socket Hello World



本文2017-3-14
  基本环境:
  1. 操作系统:Windows10  64位;
  2. Android Studio 2.3,64位。
  3. Android NDK开发包:直接使用Android Studio安装NDK。(需要梯子)
  4.按照上述按照上述第一编译好的NDK Hello World程序
  
  操作步骤:
  第一步、准备接受端,使用VC,Windows下编译执行,代码如下:

#include <stdio.h>
#include <Winsock2.h>

#pragma comment(lib, "Ws2_32.lib")

int 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(10000);
	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);

	closesocket(sockClient);
	closesocket(sockServer);
	getchar();

	return	0;
  }

第二步,在native-lib.cpp修改,代码如下

  #include <jni.h>
  #include <string>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  
  extern "C"
  JNIEXPORT jstring JNICALL
  Java_com_szboot_mysockapp_MainActivity_stringFromJNI(
          JNIEnv *env,
          jobject /* this */) {
      std::string hello = "Hello from C++";
  
      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.6.164");
      sockAddr.sin_port	= htons(10000);
      int nRet = connect(sockClient, (sockaddr*)&sockAddr, sizeof(sockaddr_in));
      char	szMsg[1024] = "andriod hello socket!";
      nRet = send(sockClient, szMsg, strlen(szMsg), 0);
  
      return env->NewStringUTF(hello.c_str());
  }


【注意】,其中inet_addr("192.168.6.164")修改为电脑执行接收端的实际IP地址。
  
  第三步,在AndroidManifest.xml中,添加app网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>
  
  将电脑和安卓设备(手机)连接到同一局域网中,先执行Windows接收端,再在Andriod端执行这个app,就可以在接收端看到“recv: andriod hello socket!”消息了。
  
  






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值