2016-03-23 6 views
1

Android programımda bir C Programından DatagramPacket alıyorum. Verileri ayrıştırmak için NDK kullanmam gerekiyor. Alınan paketleri ayrıştırmak için yerel yönteme geçmek istiyorum. Birisi bana alınan paketi C işlevine iletmenin bir yolunu söyleyebilir mi?Android NDK, DatagramPacket'i C işlevi için argüman olarak nasıl iletilir?

DatagramPacket packet = new DatagramPacket(buf, buf.length); 
socket.receive(packet); 
System.out.println(packet.getLength()); 

Şimdi bu ayrıştırmak için C fonksiyonuna paketlerini aldı geçmesi gerekiyor.

+0

Alınan datagram paketlerini, aldığınız C oprogramına aktarmak ister misiniz? Lütfen açıkla. – EJP

+0

Alınan datagram paketlerini Android içindeki yerel yönteme aktarmak istiyorum. Aldığım C programına geri dönme. – somia

cevap

0

buf'u (bunun bir byte[] olduğunu varsayarak) ve packet.getLength() değerini JNI işlevine iletin. İçinde, bayt dizisi işlevleri kullanın - e. g. Gerçek baytları almak için JNIEnv::GetByteArrayRegion().

+0

Paketin alınması için C işlevi zaten tanımlanmıştır. _PktHdrTypeDef byte [] olarak bir yapı alıyorum ve C işlevi geçersizdir Parse_header (_PktHdrTypeDef * pPktHdr) – somia

+0

Rasgele C işlevleri zaten Java'dan çağrılmaz, değil mi? Bunun için bir JNI uyumlu sarıcıya ihtiyacınız vardır, 'Java_com_mypackage_MyClass_MyMethod() 'şeklinde. –

+0

Bu durumda paketi MyMethod (buf) olarak iletebilir ve Java_com_mypackage_MyClass_MyMethod (JNIEnv * env, _PktHdrTypeDef * pPktHdr) – somia