【发布时间】:2011-06-29 14:18:22
【问题描述】:
我对 Java 和 C 编程都很陌生,需要一些帮助。 所以我有一个通过 UDP 发送结构的 C 应用程序:
#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));
}
现在我需要能够在 Java 中通过 UDP 接收这些数据并使用这些值填充对象。我可以获得第一个字符串(名称),但不确定如何获取剩余的项目。
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);
}
}
}
我查看了 Google 的协议缓冲区,但它显然需要双方都进行更改。 我还需要能够最终将这些数据从 Java 对象发送到 UDP 并返回到 C 结构中。
非常感谢。
【问题讨论】:
标签: java c serialization udp