使用java发送带有消息头+ InetAddress的消息,但得到的结果与预期不同

时间:2016-01-20 10:09:44

标签: java c

我知道InetAddress长4个字节。是否可以使它长16个字节?我需要16个字节长然后我需要通过本地unix套接字上的OutputStream发送它。谢谢!

c应用程序需要struct sockaddr_in类型,其大小为16字节。

我尝试使用正确发送4个字节的byte[] ipBytes = InetAddress.getByName("153.16.12.1").getAddress();,但我需要16个字节的等价(就好像它是一个发送数据长16个字节的sockaddr_in)。我尝试发送数据i c和java希望得到相同的outpt但事实并非如此。

编辑:这是我得到的2个输出。第一个由c编码文件生成并正确发送数据,而第二个案例是我尝试使用java发送相同的数据。我认为这不是一个问题,因为大多数角色都处于正确位置或靠近。

我收到n个字节:44

[ 68 01 07 00 01 00 00 00 01 00 1f ec 2d 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 99 10 0c 01 60 05 40 00 00 00 00 00 ]

我收到n个字节:48

[ 68 01 07 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 99 10 0c 01 ]

奇怪的是,我还获得了4个额外的字节。为什么呢?

1 个答案:

答案 0 :(得分:2)

我猜你想通过IPv6传递IPv4地址。有一种称为IPv4 over Ipv6 address mapping的技术,您将IPv4地址作为地址的低位传递,如此

  

例如,:: ffff:192.0.2.128表示IPv4地址192.0.2.128