我有一项任务,我将为游戏实施一个得分服务器。当游戏完成时,游戏将发送()玩家姓名(char *名称)和得分(int得分)到服务器进行注册,接收(),服务器将发回5个最高分。
我们将使用Berkeley套接字和C.在阅读和研究示例之后,我只能找到只发送单个变量的示例。
write(sd, "Hello World", 12);
char buf[13];
read(sd, buf, 12);
buf[12] = '\0';
通常做什么?发送每个变量(名称和分数)是单独的write()函数,还是创建一个包含两个变量的结构?
在 Beej的网络编程指南中阅读了一些内容后,我遇到了必须考虑的字节顺序(大/小 - 头)的问题,这显示在部分下面7.4序列化 - 如何打包数据,并且没有问题,除了在所有示例代码包中它们是浮点数和单个变量,有没有办法打包整个结构?
还有一个 7.5 Sone of Data Encapsulation ,它涉及创建描述客户端和服务器如何通信的协议,对我而言,这看起来更像是一个结构,我不会做什么,但是没有代码显示原则。
简而言之:我想在服务器和客户端之间建立稳定的通信,我只交换单个变量,
答案 0 :(得分:1)
在网络通信中,没有变量或结构的概念。你正在做的是发送一个字节序列。
因此发送结构的想法与发送单个值相同:将结构转换为字节序列(序列化),将其写入套接字,另一端将字节序列转换回结构(反序列化)。
所以现在你的问题变成序列化了:我如何序列化结构?
这只是序列化结构的各个值的组合。
更常见的是什么
通常您希望减少网络流量。因此,如果您要预先发送所有数据,那么立即发送数据会比通过分别发送每个名称/分数对手动分块数据更有效。