Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
-12 / 4 / 2
Регистрация: 05.05.2014
Сообщений: 90
1

Передача данных Клиент-сервер-клиенты

23.08.2014, 04:55. Показов 6012. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как передавать не строчные значения, а к примеру координаты float, целочисленные и логику?

C++
1
2
// передаем строку клиента серверу
        send(my_sock, &buff[0], strlen(&buff[0]), 0);
C++
1
2
//прием строки от клиента и возвращение ее клиенту
send(my_sock, &buff[0], bytes_recv, 0);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2014, 04:55
Ответы с готовыми решениями:

Передача данных клиент-сервер
Добрый день, пытаюсь разобраться с передачей данных клиент-сервер. Вот кое-как по примерам в...

Передача и получение клиент-сервер
У меня программа- консольное приложение с архитектурой клиент-сервер. Также сервер подключен к базе...

Клиент-Сервер: передача байтов
Здравствуйте! Написала приложения клиента и сервера. Может, кто подскажет, как сделать буфер...

Передача файлов клиент-сервер
Здравствуйте. Мне нужно организовать передачу файла из одной папки в другую. Клиент отправляет,а...

8
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.08.2014, 11:06 2
Я бы здесь прикрутил какую-нибудь библиотеку сериализации.
Например, Boost.serialization. Но можно и другую, или самому написать, если передаваемые
объекты структурно просты. Суть такая: преобразовываем объекты в "плоский" вид, например
std::string передается в виде символьного массива с длиной, а затем отправляем в сеть.
На той стороне выполняется обратный процесс - реконструирование объекта из потока байт.
1
-12 / 4 / 2
Регистрация: 05.05.2014
Сообщений: 90
23.08.2014, 14:34  [ТС] 3
Я так понимаю нужно преобразовывать численные переменные в текст и обратно? Разве не существует метода проще?
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.08.2014, 14:53 4
Текст - не обязательно. Можно передавать числовые данные "как есть":
C++
1
2
3
int Value = 123;
Stream.Write(TAG_INT);
Stream.Write(&Value, sizeof (Value));
Но текстовые форматы более переносимые, т.к. не нужно
учитывать размер типов, порядок байт и прочее.
Такие вещи, как XML или JSON, придумали не от хорошей жизни.
1
-12 / 4 / 2
Регистрация: 05.05.2014
Сообщений: 90
23.08.2014, 15:32  [ТС] 5
Спасибо, я рассмотрю оба варианта, начну с конвертации строк.
Stream.Write в какой библиотеке сидит?
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.08.2014, 15:35 6
Stream.Write - это просто для примера написал.
1
Эксперт С++
8482 / 6149 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.08.2014, 01:19 7
Цитата Сообщение от Blizzru Посмотреть сообщение
Я так понимаю нужно преобразовывать численные переменные в текст и обратно? Разве не существует метода проще?
Тут как бы зависит от того как реализовывать в двоичном виде или текстовом.
Я бы выбрал текстовый, отлаживать легче.
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
25.08.2014, 10:07 8
Цитата Сообщение от Blizzru Посмотреть сообщение
переменные в текст и обратно? Разве не существует метода проще?
по сети что передается? набор байт, следовательно и любые числа надо преобразовывать к набору байт(набор байт можно рассматривать как набор символов)
например
C++
1
2
float x = 54.5;
send(socket, (char*)&x, sizeof(x));
Добавлено через 1 минуту
ну и на стороне сервера
C++
1
2
3
char msg[255];
recv(socket, msg, sizeof(float));
float x = *((float*)msg);
0
Эксперт С++
8482 / 6149 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.08.2014, 13:11 9
Ну можно и строками общаться:

C++
1
2
3
4
5
6
7
std::stringstream ss;
int cmd= 10; // Cоответствует команде COORD говорит что это именно координаты, а не что иное.
std::string descripton= "COORD";
ss<<cmd <<" " <<descripton <<" " <<x <<" " <<y <<"\r\n";
std::string line= ss.str();
 
send(socket,line.c_str(), line.size() );
Единственная проблема организовать буфер который сможет накапливать данные и предоставит возможность читать
по-строчно.
0
25.08.2014, 13:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2014, 13:11
Помогаю со студенческими работами здесь

Клиент - Сервер, передача данных
есть страничка с формой клиентский скрипт собирает данные из формы в Array по окончании работы...

Клиент-Сервер передача данных
Продолжаю задавать глупые вопросы. подскажите как передавать данные в байтовый буфер - если мое...

Передача данных клиент-сервер
Всем доброго. Только начал изучать сокеты и передачу через tcp/udp. Есть клиент и сервер, коннект...

Передача данных, клиент-сервер по интернету
Здравствуйте, простой чат на основе Winsock, не работает через интернет, т.е. данные только от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru