伯克利套接字通信,发送和接收结构

时间:2012-11-05 00:13:07

标签: c struct berkeley-sockets

我有一项任务,我将为游戏实施一个得分服务器。当游戏完成时,游戏将发送()玩家姓名(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 ,它涉及创建描述客户端和服务器如何通信的协议,对我而言,这看起来更像是一个结构,我不会做什么,但是没有代码显示原则。


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

1 个答案:

答案 0 :(得分:1)

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

因此发送结构的想法与发送单个值相同:将结构转换为字节序列(序列化),将其写入套接字,另一端将字节序列转换回结构(反序列化)。

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

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

  

更常见的是什么

通常您希望减少网络流量。因此,如果您要预先发送所有数据,那么立即发送数据会比通过分别发送每个名称/分数对手动分块数据更有效。