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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2016, 22:07   #1
Александр3
Пользователь
 
Регистрация: 22.11.2015
Сообщений: 52
По умолчанию Передать массив от клиента серверу

Здравствуйте. Суть такова. Когда в одной проекте на Form1 у меня клиент, а на Form2 у меня сервер и я передаю массив от клиента к серверу, то всё работает, вот код:

Код:
void __fastcall TForm1::Button2Click(TObject *Sender)//на Клиенте
{
 A[0]=Edit1->Text;
 A[1]=Edit2->Text;
Client->Socket->SendBuf(&A,sizeof(A));
}
void __fastcall TForm2::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
Socket->ReceiveBuf(&A,sizeof(A));
Memo1->Lines->Add(A[0]+" "+A[1]);
 
}
Но если я клиент и сервер сделаю отдельными проектами, то законектиться получается, передать текст получается, а вот передать массив этим же методом нет, в чём проблема? очень надо

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Александр3 вне форума Ответить с цитированием
Старый 02.11.2016, 22:12   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А каким образом сервер узнает размер массива? Передавайте размер сначала.

И что за массивы? sizeof работает не во всех случаях.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 02.11.2016 в 22:16.
Alex11223 вне форума Ответить с цитированием
Старый 02.11.2016, 22:15   #3
Александр3
Пользователь
 
Регистрация: 22.11.2015
Сообщений: 52
По умолчанию

ТАк я же прописал какое количество байт считывать. И размер массива и на клиенте и на сервере я указал одинаковый или это не имеет значение? Если нет, то каким образом можно это реализовать? И да я пробовал узнать размер(колво байт) переданных сокету и там писало 8, получается, что что-то передаётся, но я не могу взять эту информацию в массив(String). Там такая фишка, что когда хочу вывести элемент из массива, после того кода который ниже, то выдаёт ошибку access violation at address in module, как я понимаю, что не к чему обращаться
Код:
Socket->ReceiveBuf(&A,sizeof(A));

Последний раз редактировалось Александр3; 02.11.2016 в 22:24.
Александр3 вне форума Ответить с цитированием
Старый 02.11.2016, 22:28   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как массивы объявлены/созданы?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.11.2016, 22:32   #5
Александр3
Пользователь
 
Регистрация: 22.11.2015
Сообщений: 52
По умолчанию

в обоях случаях
Код:
 String A[2]
Александр3 вне форума Ответить с цитированием
Старый 02.11.2016, 22:40   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а String это ж как бы тоже массив символов. Нельзя просто объявить пустую строку и запихнуть на ее адрес байты другой строки.

Причем тут наверно даже байты содержимого не передаются, а только указатели на строки. 8 байт это ж явно не все содержимое
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.11.2016, 22:42   #7
Александр3
Пользователь
 
Регистрация: 22.11.2015
Сообщений: 52
По умолчанию

тогда почему, если клиент и сервер в одном проекте, только на разных Form, то всё работает?
http://programmersforum.ru/attachmen...1&d=1478115733
Изображения
Тип файла: png Безымянный.png (53.9 Кб, 131 просмотров)
Александр3 вне форума Ответить с цитированием
Старый 02.11.2016, 22:49   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну тут оно будет работать и без ReceiveBuf
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.11.2016, 22:51   #9
Александр3
Пользователь
 
Регистрация: 22.11.2015
Сообщений: 52
По умолчанию

Хорошо, попробовал исправить массивы на int A[2], сейчас ошибок нет, но и получаю не совсем что нужно)
В общем вот что мне выдаёт сервер

@//тут различные символы
@
Код:
Socket->ReceiveBuf(&A,sizeof(A));
Memo1->Lines->Add(A[0]+" "+A[1]);
Когда передаю такие значения
Код:
A[0]=Edit1->Text;//тут перевод в  int прост олень писать было
 A[1]=Edit2->Text;
Client->Socket->SendBuf(&A,sizeof(A));
Пробовал и без амперсанда передавать и принимать значения, ошибок нет и выводит абсолютно тоже самое(честно говоря и н знаю что в данном случае амперсанд выполняет)
Александр3 вне форума Ответить с цитированием
Старый 02.11.2016, 22:58   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так не получится. Для отправки строки надо отправлять например что-то примерно такое
Код:
SendBuf(str, str.Length())
и на сервере выделять строку/буфер нужного размера перед записью туда.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла от клиента серверу UbeiBobra C++ Builder 6 19.02.2016 08:44
Переподключение клиента к серверу fn12gl34 Работа с сетью в Delphi 2 09.04.2015 10:29
Отсутствует подключение клиента к серверу fn12gl34 Работа с сетью в Delphi 3 03.02.2015 18:26
Передача файла от Клиента к Серверу aank10 C++ Builder 2 05.10.2012 18:02
ListBox. От клиента к серверу. GrabbeR Работа с сетью в Delphi 1 03.05.2012 16:00