Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2015, 18:17   #1
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию WindowsSockets

Здравствуйте, я должен изучить WindowsSokets - прочел известную статью из интернета "Самоучитель игры на Winsock".
У меня появилось несколько вопросов, помогите пожалуйста, кто может.
1)Есть функции пересылки send и sendto, там можно пересылать массивы типа char. А вот как пересылать массивы типа float? Это выходит придется по одному элементу массива передавать в формате char, а потом после приема конвертировать обратно в float? Или можно как - то по другому?
2)Возможно ли переслать сообщение сразу от клиента к клиенту или пересылка от клиента к клиенту возможна только, через сервер?
3)Может ли сервер отправить сообщение серверу?

Последний раз редактировалось Questionier; 10.04.2015 в 18:48.
Questionier вне форума Ответить с цитированием
Старый 10.04.2015, 19:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
А вот как пересылать массивы типа float? Это выходит придется по одному элементу массива передавать в формате char, а потом после приема конвертировать обратно в float? Или можно как - то по другому?
Не путайте понятие символа и тип данных char. Он был выбран потому что фактически это просто байт. Поэтому флоат это просто несколько байтов со всеми вытекающими.

Цитата:
2)Возможно ли переслать сообщение сразу от клиента к клиенту или пересылка от клиента к клиенту возможна только, через сервер?
Вы опять путаете понятия. Есть сервер, как например в инете, и есть сервер как "один из ведущих" клиентов.

Цитата:
3)Может ли сервер отправить сообщение серверу?
Сервер это не мифический зверь, а просто роль. Поэтому спокойно и делают.
p51x вне форума Ответить с цитированием
Старый 11.04.2015, 13:08   #3
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию

Спасибо большое за ответы. А вы не знаете как сделать так чтобы в массив символов закинуть массив из чисел с плавающей точкой?
И еще насколько я понял вы имеете ввиду, что надо просто программу написать так чтоб она выполняла функции клиента и функции сервера, когда требуется?
В общем задача такая, я должен написать 3 программы, которые обмениваются друг с другом массивами чисел с плавающей точкой
Questionier вне форума Ответить с цитированием
Старый 11.04.2015, 13:15   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
А вы не знаете как сделать так чтобы в массив символов закинуть массив из чисел с плавающей точкой?
Зачем? Перечитайте мой пост, похоже вы опять что-то путаете.

Цитата:
что надо просто программу написать так чтоб она выполняла функции клиента и функции сервера, когда требуется?
Роли эти весьма условные в большинстве случаев.

Цитата:
В общем задача такая, я должен написать 3 программы, которые обмениваются друг с другом массивами чисел с плавающей точкой
Ну так и передавайте, а на другом конце интерпретируйте как массив флоатов. В чем проблема?
p51x вне форума Ответить с цитированием
Старый 11.04.2015, 15:28   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Questionier Посмотреть сообщение
А вы не знаете как сделать так чтобы в массив символов закинуть массив из чисел с плавающей точкой?
Код:
union ConvertValue
{
  float data;
  char buffer[sizeof(data)];
};

ConvertValue tmp;
tmp.data = 123.45;
sendto(socket, tmp.buffer, sizeof(tmp.buffer));
waleri вне форума Ответить с цитированием
Старый 25.05.2015, 08:43   #6
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию

C данными вопросами разобрался, но появился новый. Помогите пожалуйста, подскажите, существуют ли в winsock функции, которыми можно пересылать массивы типа float сразу одной функцией без преобразования данных char во float?
Questionier вне форума Ответить с цитированием
Старый 25.05.2015, 09:02   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы так и не разобрались в вопросах. Функциям винсок глубоко пофик, что у вас массив флоатов или ромбов, они пересылают байты.
p51x вне форума Ответить с цитированием
Старый 25.05.2015, 09:02   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Нет, не существует.
Чем вам преобразование типов не нравится?
waleri вне форума Ответить с цитированием
Старый 25.05.2015, 18:46   #9
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию

Всем спасибо, просто в предыдущих ответах я неправильно понял суть и поэтому нагородил много преобразований лишних. В общем надо было так сделать:
Код:
float x[3] = {1.0f, 2.0f, 3.0f};
send(s, (char *)x, sizeof(x), 0);
...
float x[3];
recv(s, (char *)x, sizeof(x), 0);
И всё ок.
Questionier вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск