gpt4 book ai didi

c - 这在 C/C++ 套接字通信中是否合理?

转载 作者:行者123 更新时间:2023-12-04 10:46:20 25 4
gpt4 key购买 nike

我目前有一个基本的客户端/服务器设置。服务器需要接受来自客户端的请求,并且需要响应不同的请求消息类型。客户端请求的示例可以是获取可用文件列表、有多少其他客户端连接到服务器等。

显然,我必须想出一种方法来确定从发件人收到的消息中的消息类型。我想知道,如果我有一个用必要数据定义的结构,是否可以将该结构转换为 void*,通过 send(sockfd, message, length, flags) 系统调用发送它,而不是在接收方,转换它回到结构。这当然假设我在同一环境中运行客户端和服务器。

例如,如果我有以下结构:

struct message {
enum messageType { GET_FILES, GET_CLINET_NUMBER} messageType,
}

并使用此结构以下列方式发送消息

struct message msg;
msg.messageType = GET_FILES;
send(server_sockfd, (void*)&msg, sizeof(struct), 0)

在接收器上,

recv(,msg_buffer);
struct message received = (struct message*)msg_buffer;

忽略次要的语法问题,有人可以建议这种方案是否可行吗?如果没有,有没有其他方法可以在不发送原始 char* 的情况下传递消息?

最佳答案

这是完全可能的。但不推荐,因为现在您为客户端和服务器使用相同的环境,但您将来可能会更改,并且您必须更改此代码以更加独立于平台/实现。

选项? boost::serialization、XML-RPC、甚至 HTTP/REST 或任何其他适合您的高级协议(protocol)、Google Protocol Buffers、CORBA 等。

关于c - 这在 C/C++ 套接字通信中是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com