java 结构体 socket_Java开发网 - socket 怎么发结构体?

博客探讨了如何在C语言的Socket客户端使用结构体数据,并将其转换为Java Socket客户端进行通信。作者指出,C语言中的结构体在内存中按顺序存储其成员,而在Java中则需要手动序列化这些结构体。示例代码显示了如何使用DataOutputStream在Java中发送等效的数据。问题在于如何正确地序列化和反序列化嵌套结构体。
摘要由CSDN通过智能技术生成

Posted by:zming

Posted on:2005-01-10 20:36

原本的c socket客户端在向socket server发送数据包时,数据包的类型是一个c 语言中的嵌套结构体类型,例如:

typedef struct person

{

long personid

unsigned long age;

moneycard card;

char otherinfo[20];

}aperson;

typedef struct moneycard

{

char cardid[10];

long money;

}

在c程序的socket client中向server端传送的数据包的类型是person类型,即send(int sockfd, const void *msg, int len, int flags); 中的msg是一个person类型的变量。现在用java实现这个socket client,请教如果做到?(我的部分程序如下,好像有错误)

--------------------------------------------------

........//省略

DataInputStream in=new DataInputStream (socket.getInputStream ());

DataOutputStream out=new DataOutputStream (socket.getOutputStream ());

int personid = 1001;

int age = 15;

String carid ="123456";

int money = 500;

String otherInfo = "hello";

out.writeInt(personid);

out.writeInt(age);

out.writeChars(carid);

out.writeInt(money);

out.writeChars(otherInfo);

..........//省略

----------------------------------------------------

请问:在c语言中struct类型的数据在内存中是如何存储的?如果在struct A 中嵌套struct B,是否是将B中的数据按顺序放入A中相应位置?即如果按上面的两个struct例子,在内存中的存放格式是否为:

personid(long)--age(unsigned long)--carid(char[])--money(long)--otherInfo(char[])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值