2016-01-07 338 views
1

我必须在android应用程序和C++控制台应用程序之间建立连接: 控制台应用程序假设是客户端,它有4个命令从服务器获取数据,这是android设备。换句话说,我需要在控制台应用程序中显示设备信息(BT/WIFI开/关,BATTERY LVL)。C++控制台应用程序连接到android应用程序

我创建了客户端,我也有我必须检查的东西(如BT例如)的代码。 我唯一缺少的是这些之间的联系,我没有经验的服务器代码,我需要你的帮助,这是如何完成的或者教程的链接导致我没有找到一些。

了android代码:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //IMEI init 
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    IMEI = telephonyManager.getDeviceId(); 

    //software version init 
    PackageInfo pInfo = null; 
    try { 
     pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
    int SoftwareVersion = pInfo.versionCode; 


    //battery lvl init 
    battery = Library.getBatteryLevel(this); 

    //android id init 
    android_id = Secure.getString(this.getContentResolver(), 
      Secure.ANDROID_ID); 

    //android availability init 
    internetaval = Library.isNetworkAvailable(this); 

    //finish init <<~~ 




    TextView tv = (TextView) findViewById(R.id.tv1); 
    tv.setText(" " + internetaval); 

    Library.setWifi(this,false); 


} 

回答

2

虽然你的问题过于宽泛,受到被关闭,我会给你一个俯瞰线索实施。

使用Java网络API(套接字编程),您应该选择一个端口号并开始监听。关键在于您的Android设备和运行该C++应用程序的计算机必须连接到同一网络(例如WLAN或LAN)。

在这种情况下,您的设备将被分配两个唯一的IP地址,您也可以手动设置它们。

在您的客户端(C++)中,您应该创建一个TCP套接字并根据其端口号连接到您的Android设备的IP地址。因此,使用这种方式,您可以将C++连接到在您的Android应用程序中运行的Java服务器。另外在另一方面,您应该使用Java套接字API在您的Android应用中接受传入连接。

建议:决不从头开始创建你的应用程序,始终使用知名libraries。这使得开发过程更快,更令人愉快。 :)

+0

如果这是要分发给最终用户,蓝牙可能会更好,因为它包括服务发现。无线局域网可能还需要类似uPNP这样的东西,这对安装来说是相当多的额外复杂因素。 –

+0

@JanHudec你说的对,不过很多电脑可能没有蓝牙适配器。另外蓝牙的范围很小(10米)。 –

+0

@JanHudec同样在服务发现的角度来看,一个简单的解决方案是扫描一系列IP地址。 –

0

如果你的意思是你已经使用交叉编译器为你的Android设备创建了一个C++。我可以启动并执行您自己的二进制应用程序已经为您的Android应用程序建立。 最常用的用法是解压到/data/data/yourapp/somewhere里面的一个文件夹启动你自己的C++程序。然后,在单独的线程中启动此应用程序。 要在Java Android和您的C++应用程序之间进行交互,我可以为您提供针对linux操作系统的主要变体: 1. TCP-IP服务器 - 客户端。 2.使用管道交互:FIFO(文件输出)。 3.或者只是简单地运行你的c + +应用程序与一些输入参数与结果。当然,你可以像在通常的操作系统中那样读取sdtout并写入stdin。

如果您是指通常的Windows/MacOS/Linux应用程序,您必须使用WiFi/BlueTooth/NFS/Lan/adb(日志)/连接与手机进行交互,是您的设备的根源。也就是说,首先你必须定义你必须使用哪个硬件。但在这种情况下主要相互作用:TCP-IP。