#java #c #c 11 #networking #packet
#java #c #c 11 #сеть #пакет
Вопрос:
Я занимаюсь некоторыми сетевыми операциями, и мне нужна некоторая организация в моих пакетах. Отправлять необработанные байты и не иметь абстракции очень сложно.
Для разработчиков Java, знаете ли вы эквивалентные классы для ByteArrayDataInput и ByteArrayDataOutput в C ?
Если вы не знакомы с ними, не могли бы вы показать мне, как я мог бы их кодировать.
#pragma once
#include <string>
class packetreader
{
public:
bool read_bool(int index);
char read_byte(int index);
short read_short(int index);
int read_int(int index);
long read_long(int index);
float read_float(int index);
double read_double(int index);
std::string read_string(int index);
};
#pragma once
#include <string>
class packetwriter
{
void write_bool(int index, bool value);
void write_byte(int index, char value);
void write_short(int index, short value);
void write_int(int index, int value);
void write_long(int index, long value);
void write_float(int index, float value);
void write_double(int index, double value);
void write_string(int index, std::string value);
};
Это мои заголовочные файлы, теперь мне нужна помощь в их реализации.
И как я мог бы эффективно выполнять чтение / запись массивов этих типов?
например, write_double_array(массив) и read_double_array(массив)?
Записываем его с помощью write_double(array[i]) для каждого элемента в массиве?
Спасибо.
Комментарии:
1. Существует значительное количество потрясающих c -фреймворков для создания сетей , может ли один из них работать для вас?
2. Я бы предпочел узнать, как создать эту функцию, и понять ее, чтобы я мог воссоздать ее на других языках программирования, но, что наиболее важно, она нужна на C .
3. @purplex что именно вы хотите узнать? считывать данные через сеть? извлекать данные из байтов?
4. Да, у вас есть байты, и извлеките эти данные, которые были вставлены из клиента В ТОМ ЖЕ порядке, в КОТОРОМ они были записаны.
5. если вас беспокоит порядковый номер, просто запишите их побайтно и извлекайте в том же порядке, чтобы не ошибиться.
Ответ №1:
C не имеет стандартного API для работы в сети. Если ваша программа выполняется в операционной системе, то ОС, скорее всего, предоставляет API для работы в сети.
C также не имеет стандартного API для сериализации, для чего, я полагаю ByteArrayData
, и предназначены классы. Сериализация может быть реализована с помощью основных арифметических операций.
Комментарии:
1. Как я могу научиться создавать что-то подобное? То, что я хочу, уже существует с открытым исходным кодом? Я не смог найти полную репликацию того, что мне нужно, и я не могу беспокоиться о прокрутке сотен файлов в больших сетевых библиотеках с открытым исходным кодом, чтобы найти эту небольшую функцию.
2. @purplex
How can I learn
Чтение книг и изучение реализаций с открытым исходным кодом — это варианты.Does what I want already exist open source?
Без сомнения.I can't be bothered
Похоже, это суть вашей проблемы.to find this small feature
Я полагаю, это субъективно, но я бы не стал считать это небольшой особенностью.3. Я говорю о таких библиотеках, как boost, мне пришлось бы прокручивать сотни файлов, по сравнению с другими материалами, предлагаемыми такими большими библиотеками, этот материал маленький.