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

标签 c sockets

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

显然,我必须想出一种方法来确定从发件人收到的消息中的消息类型。我想知道,如果我有一个用必要数据定义的结构,是否可以将该结构转换为 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/

相关文章:

c - 是否可以在套接字级别处理代理?

c - 函数未调用

c - 为什么我的滑翔机永远不会删除,而是保留在我的生命游戏模拟游戏的屏幕底部?

java - 如何从套接字读取 JSON 数据而不是一行?

vb.net - VB.net 中的 Winsock 不工作

c++ - OpenSSL C API : How to resume TLS connection after program exec()?

c++ - 如何检测全局与链路本地 IPv6 地址

javascript - 如何连接到每个浏览器的以太网套接字?

java nio 选择器返回选定的键,但对它们没有可用的操作

c - Unix 套接字的 sockaddr_un.sun_path 区分大小写吗?