Рассмотрим следующую ситуацию: (псевдо-код)
//All our luscious data
char theChar = 123;
int theInt = 4324;
char[] theCharArray = "sometext";
//Make an array to hold all of that data.
byte[] allTheVars = new *byte[sizeOfArray];
//Copy all vars into "allTheVars"
copyToEndOfArray(theChar, allTheVars);
copyToEndOfArray(theInt, allTheVars);
copyToEndOfArray(theCharArray, allTheVars);
Таким образом, идея состоит в том, что в итоге вы получаете кучу переменных, связанных друг с другом в один и тот же массив байтов. Затем этот массив передается через Интернет. Теперь скажем, что все эти переменные были отправлены для вызова удаленной функции, как показано ниже.
//This is the function that will take in the data we sent over the network.
void remotelyCalledInternetFunction(char aChar, int anInt, char[] aCharArray)
{
}
Вместо того, чтобы вручную разбивать каждую переменную на указанный тип путем утомительного копирования из массива байтов, можете ли вы использовать метод "авторазделить" переменные, выполнив что-то вроде этого?
//Pass the byte array. The method knows what types it needs, maybe it will auto-split the data correctly?
remotelyCalledInternetFunction(allTheVars);
Если нет, есть ли что-то подобное, что я мог бы сделать?
EDIT: Любой способ сделать что-то подобное?
remotelyCalledInternetFunction(allTheVars);
//Takes first 2 bytes of the array, the next 4 bytes, and the rest for the char[]?
void remotelyCalledInternetFunction(char aChar, int anInt, char[] aCharArray)
{
}
Хорошо, как сказал Бармар в комментариях, то, что я пытаюсь выполнить, уже было выполнено с помощью RPC (Remote Procedure Calls) и маршалинга. Он рекомендовал найти хорошую библиотеку вместо того, чтобы изобретать колесо.
Библиотека, которую я обнаружил, выглядит довольно неплохо: https://github.com/cinemast/libjson-rpc-cpp
(jozef также неплохо справился с использованием структур, спасибо за это: D)
EDIT: Мне нужна библиотека для игры с низкой задержкой в онлайн-игре, поэтому я, вероятно, в конечном итоге напишу свой собственный.
Я бы предложил использовать структуру для хранения и передачи данных, как показано ниже. Это обеспечило бы автоматическое разделение данных на приемной функции.
struct myStruct {
char theChar;
int theInt;
char[] theCharArray;
}
Затем вы можете использовать memcopy с аргументами для этой структуры, обратитесь → Отправить struct over socket в C.