Lua 二进制网络传输

尝试使用 Corona SDK 创建网络游戏,但在Lua套接字方面遇到一些问题。起初我使用tcp和json数据,但现在重新制作为udp和二进制数据。

如何向服务器发送自定义结构?

例如,我需要发送操作代码(short)、ID(long)和两个坐标(float)。我可以在C或Java中实现这一点,但不知道如何在Lua中实现,如何将其写入套接字?

点赞
用户734069
用户734069

在最一般的意义上,你不能。Lua不是一种低级语言;它没有一种方法可以假装一个整数或浮点数是一袋比特,直接将其推送到管道中。

如果你需要发送非文本数据,则Lua可能不是你在这里最好的选择。然而(取决于Corona让你做什么),你可以编写一个函数在C中接受一些Lua值,将它们封装起来并返回一个Lua字符串,Lua可以将其交给LuaSockets。这个“字符串”将被传输为一个字节数组,而不是一个可读的字符串。

2012-11-18 21:13:25
用户1442917
用户1442917

如果您想要以二进制表示您的数据,可以使用lpack库(如果您熟悉Perl的pack/unpack方法,则工作类似)。另一个选择是struct库,它以C结构格式打包数据。

还有各种序列化器可供选择;我专门为通过套接字发送Lua数据而编写了Serpent

无论哪种情况,您最终都将得到表示您(打包的)数据的字符串。您只需使用常规的发送/接收调用(TCPUDP)发送此字符串即可。

2012-11-18 22:20:19