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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2014, 07:10   #1
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию Передача вектора через сокеты

Добрый день. Помогите разобраться, передаю вектор AnsiString через ClientSocket ServerSocket.

Сервер передает:
Код:
vector <AnsiString> stroki;

for (int i=0; i<10; i++){
stroki.push_back("Строка " + IntToStr(i));
}

ServerSocket1->Socket->Connections[0]->SendBuf((std::vector<AnsiString>*)&stroki, sizeof(stroki));
Клиент принимает:
Код:
vector <AnsiString> stroki;

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
        ClientSocket1->Socket->ReceiveBuf((std::vector<AnsiString>*)&stroki, sizeof(stroki));
        Memo1->Lines->Add(IntToStr(stroki.size()));        
        for (int i=0; i<stroki.size(); i++)
                Memo1->Lines->Add(stroki[i]);
}
Вроде и передается, даже stroki.size показывает размер вектора, но вывести элементы не получается
$ergius
Sergius X вне форума Ответить с цитированием
Старый 14.05.2014, 07:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А зачем vector для этого использовать? почему не *char?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 07:59   #3
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию

Потому что в дальнейшем предполагается передавать большой объем информации. Поэтому удобнее будет использовать vector.
Это просто тестовый пример
$ergius
Sergius X вне форума Ответить с цитированием
Старый 14.05.2014, 08:44   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
sizeof(stroki)
ололо
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 14.05.2014, 10:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Поэтому удобнее будет использовать vector.
А вопрос нескромный - чем удобнее?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 11:03   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Вы точно уверены, что понимаете вот эту конструкцию:
SendBuf((std::vector<AnsiString>*)& stroki, sizeof(stroki))

И кстати, ради эксперимента, попробуйте записать данные в файл и посмотреть что именно записалось.
waleri вне форума Ответить с цитированием
Старый 14.05.2014, 12:31   #7
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию

Понимаю, первый аргумент в этой конструкции это указатель на переменную (вектор), а второй аргумент - это его размер

pproger, не вижу ничего смешного, лучше бы по делу подсказал
$ergius

Последний раз редактировалось Stilet; 14.05.2014 в 12:39.
Sergius X вне форума Ответить с цитированием
Старый 14.05.2014, 12:41   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
указатель на переменную
Да. Но на какую??
На вектор - т.е. на класс а не на его содержимое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 12:43   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Sergius X Посмотреть сообщение
Понимаю, первый аргумент в этой конструкции это указатель на переменную (вектор), а второй аргумент - это его размер

pproger, не вижу ничего смешного, лучше бы по делу подсказал
да и второй аргумент это размер переменной вектора, а не содержимого.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.05.2014, 12:59   #10
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию

Ну std::vector<AnsiString> - указатель на класс вектор, а stroki - указатель на конкретный вектор
$ergius
Sergius X вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача Print Screen'а от клиента к серверу (через сокеты) valdys Работа с сетью в Delphi 5 25.08.2011 12:46
Передача массива через сокеты Kingcss Работа с сетью в Delphi 0 10.07.2011 16:14
Передача файлов через сокеты Joker_vad Работа с сетью в Delphi 1 03.12.2010 12:09
Расшифровать код (передача ФАЛОВ через сокеты) хомякec Помощь студентам 1 18.05.2010 15:54