我有一条通过 UDP 套接字发送的消息。消息的类型为 RPCMessage
typedef struct
{
enum {Request, Reply} messageType;
unsigned int RPCId;
unsigned int procedure;
int arg1;
int arg2;
} RPCMessage;
当我发送准备发送消息时,我构造消息如下:
RPCMessage toSend = {RPCMessage::Reply, htonl(rpcId), htonl(procedureId), htonl(int1), htonl(int2);
当我收到消息时,它被接收到我调用缓冲区的 char[] 中。有人建议,与其将整个缓冲区转换为 RPCMessage,不如让我从缓冲区中逐个读取每个参数,然后可以将第一个参数作为正确的枚举类型并使用 ntohl on互相争论。最好的方法是这样的:
RPCMessage::messageType type;
unsigned int id, procedure;
int int1, int2;
sscanf(buffer, %d%d%d%d%d, type, id, procedure, int1, int2);
RPCMessage received = {type, ntohl(id), ntohl(procedure), ntohl(int1), ntohl(int2));
还是有另一种/更好的方法?