Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 5.00
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
#1

Связь по TCP - C++

28.07.2009, 13:42. Просмотров 4286. Ответов 25
Метки нет (Все метки)

Здравствуйте , уважаемые программисты.
Я начинающий программист и моя задача состоит в том, чтобы обеспечить связь сервера на котором установлена программа и микроконтроллера, которой по GSM-модему устанавливает TCP-соединение и передает некоторые данные.
Мне необходимо написать программу , которая бы могла слушать порт и принимать данные от контроллера, записывать их в файл. Почитал немного про Indy, но там похоже устанавливается связь Client-Server, то есть программа должна стоять на обоих устройствах. У меня программа ставится только на серверную машину.
Подскажите каким образом можно решить данную задачу , буду благодарен за любую помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paulie
Айхрень...
306 / 174 / 4
Регистрация: 02.06.2009
Сообщений: 1,078
28.07.2009, 13:46     Связь по TCP #2
Сокеты Беркли
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 15:07     Связь по TCP #3
там похоже устанавливается связь Client-Server
У тебя тоже клиент-сервер. Только ты пишешь сервер и не может изменять код клиента.
Для того чтобы написать нужно знать что именно делает микроконтроллер с сервером ...
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 20:10  [ТС]     Связь по TCP #4
Цитата Сообщение от odip Посмотреть сообщение
У тебя тоже клиент-сервер. Только ты пишешь сервер и не может изменять код клиента.
Для того чтобы написать нужно знать что именно делает микроконтроллер с сервером ...
Он через модем устанавливает TCP-соединение и передает параметры в виде ASCII-символов.И должен их сохранять в текстовом файлике. Может сделать небольшой чат,только проблема небольшая в том, что IP все время разный у модема. Но если сделать так , чтобы программа слушала порт, то думаю это не важно
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 20:24     Связь по TCP #5
И должен их сохранять в текстовом файлике.
Наверное это сервер должен сохранять в файле, а не контроллер ?
программа слушала порт
Сервер слушает порт и принимает все коннекты с любого IP-адреса.

Я только не понял - а что собственно передает микроконтроллер на сервер ?
И для чего это все вообще ?
solar_wind
752 / 743 / 41
Регистрация: 06.07.2009
Сообщений: 2,962
Завершенные тесты: 1
28.07.2009, 20:26     Связь по TCP #6
Цитата Сообщение от amazingsoul Посмотреть сообщение
Он через модем устанавливает TCP-соединение и передает параметры в виде ASCII-символов.И должен их сохранять в текстовом файлике. Может сделать небольшой чат,только проблема небольшая в том, что IP все время разный у модема. Но если сделать так , чтобы программа слушала порт, то думаю это не важно
Я так понял что твоя программа это будет сервер. Микроконтроллер через модем будет связываться сам с твоим сервером и передавать туда данные?
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 20:35  [ТС]     Связь по TCP #7
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Я так понял что твоя программа это будет сервер. Микроконтроллер через модем будет связываться сам с твоим сервером и передавать туда данные?
Да. Я через AT-команду пишу какой IP имеет сервер и порт по которому происходит соединение. Хотел поставить обычный SQL-сервер, но там все более хитро и сложнее, поэтому подумал что проще создать свой сервер
solar_wind
752 / 743 / 41
Регистрация: 06.07.2009
Сообщений: 2,962
Завершенные тесты: 1
28.07.2009, 20:57     Связь по TCP #8
Цитата Сообщение от amazingsoul Посмотреть сообщение
Да. Я через AT-команду пишу какой IP имеет сервер и порт по которому происходит соединение. Хотел поставить обычный SQL-сервер, но там все более хитро и сложнее, поэтому подумал что проще создать свой сервер
Ну тогда тебе нужно разбираться с сокетами.
Для начала изучи статью по этой ссылке:
http://www.insidepro.com/kk/006/006r.shtml
Вообщем то все не так сложно, пишешь прогу, которая будет слушать на нужном порту. После установки соединения, тебе остается только распознать приходящие пакеты.
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 21:00  [ТС]     Связь по TCP #9
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Ну тогда тебе нужно разбираться с сокетами.
Для начала изучи статью по этой ссылке:
http://www.insidepro.com/kk/006/006r.shtml
Вообщем то все не так сложно, пишешь прогу, которая будет слушать на нужном порту. После установки соединения, тебе остается только распознать приходящие пакеты.
В сокетах Беркли там клиентская программа передает структуры. Мой контроллер-то что будет передавать?
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 21:05     Связь по TCP #10
Клиент передает серверу поток байт.
Ты должен знать какой именно формат у этого потока, чтобы правильно его интерпретировать.
solar_wind
752 / 743 / 41
Регистрация: 06.07.2009
Сообщений: 2,962
Завершенные тесты: 1
28.07.2009, 21:12     Связь по TCP #11
Цитата Сообщение от amazingsoul Посмотреть сообщение
В сокетах Беркли там клиентская программа передает структуры. Мой контроллер-то что будет передавать?
Вопервых почитай про модель OSI http://www.citforum.ru/nets/switche/osi.shtml
Ты сказал что клиент (контроллер) умеет передавать данные по TCP. TCP это потоковый протокол, то есть тебе будет передаваться поток байт. Как принять этот поток на уровне TCP я тебе ссылку дал. Далее следующий этап это расшифровать прикладной протокол контроллера, а это уже личное дело контроллера, нужно искать по техническому описанию данного конкретного контроллера, или узнавать у тех кто с ними уже работал на таком уровне.
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 21:27  [ТС]     Связь по TCP #12
Цитата Сообщение от odip Посмотреть сообщение
Клиент передает серверу поток байт.
Ты должен знать какой именно формат у этого потока, чтобы правильно его интерпретировать.
А какой примерно?
solar_wind
752 / 743 / 41
Регистрация: 06.07.2009
Сообщений: 2,962
Завершенные тесты: 1
28.07.2009, 21:35     Связь по TCP #13
Цитата Сообщение от amazingsoul Посмотреть сообщение
А какой примерно?
Это знает только контроллер, который передает данные, к TCP это не имеет уже никакого отношения...
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 22:44  [ТС]     Связь по TCP #14
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Это знает только контроллер, который передает данные, к TCP это не имеет уже никакого отношения...
Итак, разберемся с самого начала. У моего модема есть возможность передать какие-то данные через GPRS по протоколу TCP/IP. Мне нужно принимать эти данные и складывать в файл. Дело в том , что я работал с почтовым протоколом smtp. Подключался к smtp.mail.ru 25 порту и выдавал команды фразы стандартные , HALO и тд. При этом сервер понятия не имел чем я к нему подключаюсь.
Теперь мне нужно подключится уже к моему серверу по 80 порту. А я могу это сделать только создав свой сервер.
Программа будет выглядеть что-то вроде telnet, только с функцией постоянного прослушивания порта. И например будет знать что клиент подключился когда я выдам какую-нибудь фразу. Можно ли так организовать сеанс связи?

Добавлено через 18 минут 41 секунду
Мне нужно сделать нечто подобное smtp . Только по 80 порту и передать просто данные
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 23:11     Связь по TCP #15
Очень мутные объяснения. Я так и не понял - кто со стороны микроконтроллера управляет подключением к серверу ? Ты сам пишешь этот код для микроконтроллера или у него есть какой-то стандартный алгоритм ?
В начале темы ты пишешь, что можешь писать только код сервера.
Теперь оказывается тебе нужно самому передать данные и получается что ты пишешь и код клиента тоже.
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
28.07.2009, 23:40  [ТС]     Связь по TCP #16
Цитата Сообщение от odip Посмотреть сообщение
Очень мутные объяснения. Я так и не понял - кто со стороны микроконтроллера управляет подключением к серверу ? Ты сам пишешь этот код для микроконтроллера или у него есть какой-то стандартный алгоритм ?
В начале темы ты пишешь, что можешь писать только код сервера.
Теперь оказывается тебе нужно самому передать данные и получается что ты пишешь и код клиента тоже.
Итак ,более подробно. Я пишу программу для контроллера , которая собирает данные с объекта и отправляет через GSM-модем посредством понятных ему AT-команд эти данные на сервер, на котором должна быть установлена другая программа обработки этих данных. То есть принятия их и записи в текстовый файл.
В итоге у меня есть программа для контроллера, которая умеет собирать данные с объекта и передавать через модем эти данные посредством TCP и есть компьютер на котором должна быть программа прослушивания и обработки этих данных.
Вот мне то и нужно написать такую программу на C++ для компьютера. А выдавать серверу я могу что захочу, любые текстовые команды, главное чтобы он их принял
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.07.2009, 00:04     Связь по TCP #17
Ну в принципе тебе уже ответили - изучай сокеты и программирование с их использованием. Там есть примеры кода простейшего TCP-сервера. Протокол по типу SMTP придумай себе сам.
amazingsoul
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 37
29.07.2009, 00:18  [ТС]     Связь по TCP #18
Цитата Сообщение от odip Посмотреть сообщение
Ну в принципе тебе уже ответили - изучай сокеты и программирование с их использованием. Там есть примеры кода простейшего TCP-сервера. Протокол по типу SMTP придумай себе сам.
А нет ли готовых программ, для того чтобы самому не тратить на это время?
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.07.2009, 03:41     Связь по TCP #19
Цитата Сообщение от amazingsoul
Итак ,более подробно. Я пишу программу для контроллера , которая собирает данные с объекта и отправляет через GSM-модем посредством понятных ему AT-команд эти данные
это называется клиент

Цитата Сообщение от amazingsoul
на сервер, на котором должна быть установлена другая программа обработки этих данных. То есть принятия их и записи в текстовый файл.
Вот мне то и нужно написать такую программу на C++ для компьютера.
а это сервер

можно начать с любой, пишешь сервер, например, и ему телнетом закидываешь то, что будет потом клиент закидывать
по сети передаются просто потоки байт (символьные массивы), они формируются в клиенте по определённой системе, а потом сливаются в одно, когда сервер получает поток байт, он может его прямо в таком виде даже в файл сохранить, а может сразу разобрать на структуры; когда он отвечает - то же самое, у него есть структуры, он с них данные собирает в один поток и передаёт - клиент разбирает их там так же

то есть, соединение - это просто канал, чтобы эти байты передать, больше оно ничего не делает

Добавлено через 5 минут 55 секунд
ты в курсе, что сервер - это не такой компьютер, а такая программа ?
и что на компьютере сервере могут быть установлены клиенты, которые тоже такие программы
а на компьютерах клиентах могут быть установлены серверы, то есть тоже программы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2009, 06:15     Связь по TCP
Еще ссылки по теме:

Tcp/ip подключение к программе C++
TCP клиент, ошибка при компиляции C++
C++ Соединение tcp client и tcp server
C++ Можно ли по TCP отправить несколько JSON и принять соответственно?
отправка сообщений по TCP на одном компьютере C++

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

Или воспользуйтесь поиском по форуму:
solar_wind
752 / 743 / 41
Регистрация: 06.07.2009
Сообщений: 2,962
Завершенные тесты: 1
29.07.2009, 06:15     Связь по TCP #20
Цитата Сообщение от amazingsoul Посмотреть сообщение
Итак ,более подробно. Я пишу программу для контроллера , которая собирает данные с объекта и отправляет через GSM-модем посредством понятных ему AT-команд эти данные на сервер, на котором должна быть установлена другая программа обработки этих данных. То есть принятия их и записи в текстовый файл.
В итоге у меня есть программа для контроллера, которая умеет собирать данные с объекта и передавать через модем эти данные посредством TCP и есть компьютер на котором должна быть программа прослушивания и обработки этих данных.
Вот мне то и нужно написать такую программу на C++ для компьютера. А выдавать серверу я могу что захочу, любые текстовые команды, главное чтобы он их принял
Ну так бы сразу и написал. То есть ты пишешь две программы, клиент и сервер. Клиент дает команды модему, а модем организует TCP. Следовательно какие данные ты модему дал (кроме комманд) те данные сервер и получит. Поэксперементируй, придумай тот формат данных который более удобен для твоей конкретной ситуации. Каждый прикладной протокол подтачивается под конкретную задачу, поэтому примеры кода тебе не помогут, а только запутают. Ты конечно можешь взять за основу и smtp протокол...но оно тебе надо? ведь тебе всего то нужно передать какие то данные с клиента на сервер.
Например: клиент передает строку "HELLO", формируешь пакет 55 55 8 H E L L O.
Первые два числа признак начала пакета данных, 8 длина пакета, а дальше данные. Можно придумать еще множество параметров, например контрольную сумму, но все это зависит от твоей конкретной задачи.
Yandex
Объявления
29.07.2009, 06:15     Связь по TCP
Ответ Создать тему
Опции темы

Текущее время: 08:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru