0

我有一个任务,我要为游戏实现一个得分服务器。游戏完成后,游戏将发送()玩家姓名(char *name)和得分(int score)到服务器进行注册,receive(),服务器将发送回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涉及创建一个描述客户端和服务器如何通信的协议,对我来说,这看起来更像一个结构,我不会做,但是没有显示原理的代码。


简而言之:我想在服务器和客户端之间建立稳定的通信,在这里我交换的不仅仅是单个变量,

4

1 回答 1

1

在网络通信中,没有变量或结构的概念。你正在做的是发送一个字节序列。

所以发送结构体的思路,和发送单个值是一样的:将结构体转换成字节序列(序列化),写入socket,在另一端,将字节序列转换回结构体(反序列化)。

所以现在你的问题变成了序列化之一:我如何序列化一个结构?

这只是序列化结构的各个值的组成。

更常见的是什么

通常您希望减少网络流量。因此,如果您有所有要预先发送的数据,那么一次发送会更有效,然后通过单独发送每个名称/分数对来手动分块数据。

于 2012-11-05T00:26:26.370 回答