【问题标题】:header in socket programming套接字编程中的标头
【发布时间】:2010-11-17 20:46:54
【问题描述】:

我正在编写我的第一个套接字行,并且已经完成了创建一个在它们之间传输消息的客户端服务器系统。下一步是让一个报头让接收者知道消息有多少数据以及消息是如何发送的。我怎样才能做到这一点?

我希望标题包含两个 int:

int to_phone_number;
int size;

如何发送标头?

send(sock, the_message, max_message_length, 0);

【问题讨论】:

  • 作为参考,int 不能保证足够大来表示电话号码(实际上通常不是,除非您假设电话号码的长度永远不会超过 9 位并且@ 987654324@s 有 32 位)。

标签: c sockets


【解决方案1】:

标题,正文,还是数据。

您将像发送任何内容一样发送标题。

您可能希望有一个 struct message_header 来组成您的标题。

struct message_header {
  int to_phone_number;
  int size;
};

创建一个struct message_header 变量,设置它的字段,然后发送它。

struct message_header header;
// ...
send(sock, &header, sizeof(header), 0);

【讨论】:

  • 不同系统之间的字节序(字节序)可能不同,应该考虑到这一点。传统上,二进制整数值以大端顺序发送,因此 16 位数字265 将作为(十六进制)01 00 而不是00 01 发送。 x86 是小端。 标头具有切换网络字节顺序和从网络字节顺序切换的功能,无论系统如何,都可以正常工作。此外,sizeof(int) 因系统而异。您可以包含 并使用 int32_t 来确定大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2013-03-03
  • 2012-09-25
  • 1970-01-01
  • 2010-10-16
  • 2015-04-22
  • 2011-04-04
相关资源
最近更新 更多