I am new to Java and C programming and need some help. Therefore, I have a C application that sends structures via UDP:
#include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main(int argc, char**argv) { int sockfd,n; struct sockaddr_in servaddr,cliaddr; struct dataType { char name[4]; unsigned short did; unsigned short sid; unsigned short type:4,pri:2,cb:2,flags:8; unsigned char pblock; unsigned char tblock; unsigned short mess; unsigned int window:24; }; struct dataType sample_header; strcpy(sample_header.name,"TEST"); sample_header.did=23; sample_header.sid_id=1; sample_header.type=1; sample_header.pri=01; sample_header.cb=1; sample_header.flags=18; sample_header.pblock=10; sample_header.tblock=20; sample_header.mess3; sample_header.window=123890; sockfd=socket(AF_INET,SOCK_DGRAM,0); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=inet_addr(argv[1]); servaddr.sin_port=htons(6120); sendto(sockfd, (char *)&sample_header, (sizeof(struct dataType)),0,(struct sockaddr *)&servaddr,sizeof(servaddr)); }
Now I need to be able to receive this data through UDP in Java and populate the object with these values. I can get the first row (name), but I donβt know how to get the remaining elements.
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.io.*; import java.net.*; import java.awt.*; import java.nio.*; public class UDPReceive { public static void main(String args[]) { try { int port = 6120; DatagramSocket dsocket = new DatagramSocket(port); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while (true) { dsocket.receive(packet); byte[] data = packet.getData(); String msg1 = new String(data, 0, 5); System.out.println("Here is SOME :" + msg1); packet.setLength(buffer.length); } } catch (Exception e) { System.err.println(e); } } }
I looked at the Google protocol buffers, but obviously this requires changes on both sides. I should also be able to end up sending this data from the Java object to UDP and return to the C structure.
Thank you very much.
source share