我有一个在x86架构下,使用Linux和伯克利套接字API开发的TCP服务器。该服务器运行良好,没有任何问题。但是由于某些原因,现在我必须在MIPS架构上运行该服务器,该架构具有大端字节序。
服务器和客户端通过一组预定义的协议进行通信。我将举个例子,说明服务器如何向客户端发送简单消息:
struct echo_req req;
req.header.version = OFP_VERSION;
req.header.type = OFPT_ECHO_REQUEST;
req.header.length = htons (sizeof req);
req.header.xid = htonl(y);
req.data = htonl (456);
char data[sizeof (req)];
data[0] = req.header.version;
data[1] = req.header.type;
memcpy (data + 2, &req.header.length, 2);
memcpy (data + 4, &req.header.xid, 4);
memcpy (data + 8, &req.data, 4);
if ((send (sock_fd, &data, sizeof (data), 0) == -1))
{
printf ("Error in sending echo request message\n");
exit (-1);
}
printf("Echo Request sent!\n");
如您所见,我使用
htonl
和htons
将任何大于一个字节的类型转换为网络字节顺序。在组装完数据包后,我会将其序列化并打包到char
数组中,最后将其发送到网络上。现在,在我在大端架构上运行服务器之前,我想澄清一些事情。在我的理解中,当我使用
memcpy
复制数据并进行打包时,如果将其发送到网络上,则在大端架构上不应该存在任何问题,因为memcpy
将对数据进行逐字节复制到数组中,因此在运行大端架构时字节顺序不应存在任何问题。然而,我想听听你们这些比我更了解网络编程的人的意见,因为我还是一个初学者:)。请指导我是否正确。非常感谢您的帮助。谢谢
sizeof (echo_req)
的大小是否相同。 - Robᵩ