![]() |
|
Модераторы: bsa |
![]()
|
|
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
есть две программы – prog1 и prog2:
мне надо пересылать данные по сети между этими прогами: допустим из prog1 я хочу пересылать в prog2 переменную i++, а получать от prog2 значение i+=2 (то есть prog2 отсылает значение на единицу больше, чем она получила от prog1). это осуществляется некими самодельными функциями send(char *b) и read(char *c), одним из параметров которых является указатель(адрес) на пересылаемый буфер с данными... подскажите пож-та как с ним (с этим указателем) надо правильно обращаться: записать переменную i в буфер b (или с) в одной программе и прочитать ее другой программой... что-то никак не разберусь я с этими указателями...помогите таким примерчиком... |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
указатели вам не помогут, у двух процессов разные адресные (изолированные друг от друга) пространства. Т.е. даже если указатель имеет в двух процессах значение char*p = (char*)0xBADF00D;, то это будут совершенно разные разные области памяти (притом еще неизвестно где, в реальной памяти, свопе или еще где-то в дебрях менджера памяти).
Обмен данными, о котором говорите вы, обычно называется shared memory и накладывает определенные ограничения (по сети эта память вообще не передается). вам нужно просто по сети пересылать сами значения указываемых величин (т.е. НЕ указателей), и далее в программах их интерпретировать. Это сообщение отредактировал(а) jonie - 9.2.2010, 20:45 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
не...если взять например любую функцию работы с сокетами, то там как раз передаваемый буфер задается именно указателем...
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
kuvshinka, пересылаются данные, хранящиеся в буфере, на который указывает указатель. Не надо путать понятия "данные" и "указатель на данные".
Ты сначала сделай пересылку данных - это 99,99% работы, а потом уже будешь заморачиваться на приращение. |
|||
|
||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
функции пересылки у меня есть - и там параметром задается указатель на пересылаемый буфер (в который пишутся/ считываются данные)....
вот я и хочу разобраться с тем, как данные записать в буфер и прочитать их из него на другой стороне (компьютере) с использованием указателей (то есть пытаюсь понять методику использования здесь указателей, поэтому и прошу дать простенький пример на "пересылку (то есть просто запись данных в массив(указатель)) данных, хранящихся в буфере, на который указывает указатель" Это сообщение отредактировал(а) kuvshinka - 10.2.2010, 21:06 |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
||||
|
|||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
вау.. а что так сложно "static_cast<char*>(static_cast<void*>"? что сие означает?
нельзя как-то так?:
и почему var приводится именно к char? то есть в Вашем примере передается адрес переменной (var) с заранее записанными в нее данными? а как мне их прочитать в какую-то другую переменную? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
recv( (char *)var,...) - это совсем не то, что recv( (char *)&var,...).
kuvshinka, давай ты сначала почитаешь про указатели из Часто задаваемых вопросов. А потом уже будешь задавать правильные вопросы, на которые можно будет дать корректный ответ не пытаясь догадаться, что ты имела в виду. |
|||
|
||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
спасибо за ссылку...обязательно еще раз постараюсь вникнуть...
просто хотелось понять смысл таких манипуляций - recv( (char *)&var,...) - одной фразой... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
отправляем sizeof(var) char'ов начиная с адреса размещения переменной var.
|
|||
|
||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
а адрес размещения переменной var мы узнаем при ее объявлении?
каким образом тогда из другой программы прочитать данные из этой var в другую переменную? |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Вот примерчик отсылки INT(а) с контролем пересылки:
=========================================
A = 6; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Адрес можно узнать написав перед именем переменной амперсанд: &var
Может стоит все-таки сначала разобраться с работой и смыслом указателей, а уже потом заниматься передачей по сети? Так как передача по сети очень непростое дело. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Перед тем как писать сетевые приложения, желательно почитать теорию. Лично я сейчас потихоньку осваиваю Танеbаума "Компьютерные сети" ~1000 стр. У автора неподражаемый стиль, читать интересно, несмотря на размеры... К тому же надо искать современную литературу. Всё течёт и изменяется, к примеру - классовая адресация в IP устарела. Это сообщение отредактировал(а) Леопольд - 11.2.2010, 18:15 -------------------- вопросов больше чем ответов |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |