Перенос приложения с архитектуры с прямым порядком байтов -на архитектуру с прямым порядком байтов -

У меня есть TCP-сервер, разработанный на архитектуре x86 с использованием C под Linux с использованием berkley socker API. Сервер работает нормально, без проблем. Но теперь по некоторым причинам мне приходится запускать сервер на архитектуре MIPS, которая имеет архитектуру big-endian.

Сервер и клиенты взаимодействуют через набор предопределенных протоколов. Я приведу пример того, как сервер отправляет простое сообщение клиентам :

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и, наконец, отправляю их в сеть.

Теперь, прежде чем я запущу свой сервер на архитектуре Big -endian, я хотел прояснить несколько вещей. По моему мнению, поскольку я memcpyсобираю данные и упаковываю их, если я отправляю их по сети, это не должно вызывать никаких проблем с архитектурой с большим -порядком байтов, так как memcpy будет выполнять побайтовое копирование данных в array и, следовательно, не должно быть никаких проблем с порядком байтов при работе с Big -endian. Тем не менее, я хотел узнать мнение о вас, люди, которые, как я полагаю, знают намного больше, чем я, поскольку я все еще новичок в сетевом программировании :). Пожалуйста, помогите мне в этом, на правильном ли я пути или нет. Вся помощь очень ценится.

Спасибо

5
задан Abdullah 27 April 2012 в 21:03
поделиться