Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/32: Рейтинг темы: голосов - 32, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 28.07.2009
Сообщений: 37

Связь по TCP

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

Студворк — интернет-сервис помощи студентам
Здравствуйте , уважаемые программисты.
Я начинающий программист и моя задача состоит в том, чтобы обеспечить связь сервера на котором установлена программа и микроконтроллера, которой по GSM-модему устанавливает TCP-соединение и передает некоторые данные.
Мне необходимо написать программу , которая бы могла слушать порт и принимать данные от контроллера, записывать их в файл. Почитал немного про Indy, но там похоже устанавливается связь Client-Server, то есть программа должна стоять на обоих устройствах. У меня программа ставится только на серверную машину.
Подскажите каким образом можно решить данную задачу , буду благодарен за любую помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2009, 13:42
Ответы с готовыми решениями:

Связь TCP сервер-клиент
Включаю сервер на прослушку, соединение от клиента приходит - вызывается сигнал newConnection(), а сигнал connected() для клиента хоть убей...

Прямая связь между веб-страницей и TCP сервером
В общем, суть вопроса в заглавии. Как это организовать на JS? Где-то прочитал, что можно через сырые сокеты, но подробной информации и...

Связь TCP сервер - сервер-клиент на node.js - браузер. нужна коррекция
Суть проблемы: написал по примерам программу, с помощью которой можно с браузера отправить команду на TCP сервер и получить ответ. Все...

25
0 / 0 / 1
Регистрация: 28.07.2009
Сообщений: 37
30.07.2009, 22:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Ну так бы сразу и написал. То есть ты пишешь две программы, клиент и сервер. Клиент дает команды модему, а модем организует TCP. Следовательно какие данные ты модему дал (кроме комманд) те данные сервер и получит. Поэксперементируй, придумай тот формат данных который более удобен для твоей конкретной ситуации. Каждый прикладной протокол подтачивается под конкретную задачу, поэтому примеры кода тебе не помогут, а только запутают. Ты конечно можешь взять за основу и smtp протокол...но оно тебе надо? ведь тебе всего то нужно передать какие то данные с клиента на сервер.
Например: клиент передает строку "HELLO", формируешь пакет 55 55 8 H E L L O.
Первые два числа признак начала пакета данных, 8 длина пакета, а дальше данные. Можно придумать еще множество параметров, например контрольную сумму, но все это зависит от твоей конкретной задачи.
Нашел решение в том , чтобы на машину поставить почтовый сервер с HTTP -протоколом и ведением журнала , единственное в чем проблема ту строчку что я вывожу через контроллер показывает пустым полем..как будто CR LF обычный
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
30.07.2009, 23:05
Ну так покажи что делаешь и что пишется в лог.
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
31.07.2009, 06:21
Цитата Сообщение от amazingsoul Посмотреть сообщение
Нашел решение в том , чтобы на машину поставить почтовый сервер с HTTP -протоколом и ведением журнала , единственное в чем проблема ту строчку что я вывожу через контроллер показывает пустым полем..как будто CR LF обычный
Так понятно, та строчка которую выдает тебе контроллер состоит скорее всего из кодов непечатных символов. И скорее всего их нельзя интерпретировать как символы, тебе нужно отображать коды в числовом или шестнадцатеричном виде.

Ну вот начали с написания программы, закончили логом почтового сервера.....
написал бы простенький TCP сервер и не извращался бы так.....я же тебе дал статью где все разжевано и есть готовые примеры.....
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
31.07.2009, 06:37
Цитата Сообщение от amazingsoul
как будто CR LF обычный
надо примимать байты и отображать потом тоже (потому что, даже если ты их увидишь, смысла в этом мало)
тебе приходит байт - ты на экран пишешь его признак "пришло такое-то сообщение"
тогда такой заморочки с обязательным наличием понятных для человека слов (типа команд серверу) не будет
0
0 / 0 / 1
Регистрация: 28.07.2009
Сообщений: 37
01.08.2009, 02:37  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
надо примимать байты и отображать потом тоже (потому что, даже если ты их увидишь, смысла в этом мало)
тебе приходит байт - ты на экран пишешь его признак "пришло такое-то сообщение"
тогда такой заморочки с обязательным наличием понятных для человека слов (типа команд серверу) не будет
Мне нужен не просто признак, моя задача состоит в том чтобы складывать эти данные в файлик , который будет потом анализироваться.

Добавлено через 2 минуты 31 секунду
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Так понятно, та строчка которую выдает тебе контроллер состоит скорее всего из кодов непечатных символов. И скорее всего их нельзя интерпретировать как символы, тебе нужно отображать коды в числовом или шестнадцатеричном виде.

Ну вот начали с написания программы, закончили логом почтового сервера.....
написал бы простенький TCP сервер и не извращался бы так.....я же тебе дал статью где все разжевано и есть готовые примеры.....
Проблема в том, что если я подключаю модем и выхожу с компьютера в интернет через этот же модем,через терминальную программу даю команды посылки этих символов, то все пишется прекрасно. А если через контроллер, то приходит пустая строчка. Мне это непонятно. А по поводу сервера, зачем, если есть готовые программы,бесплатные и имеющие те функции, которые мне нужны
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.08.2009, 05:51
Цитата Сообщение от amazingsoul
Мне нужен не просто признак, моя задача состоит в том чтобы складывать эти данные в файлик , который будет потом анализироваться.
не, сначала нужно представить это в программе, а потом уже складывать в файл это представление
может даже складывать не придётся, анализ будет возможен прямо в программе

я так, примерно, накидаю
C
1
2
3
4
5
6
#define MAXBUF  1000
 
struct received {
    char buffer[MAXBUF];
    short length;
};
вот ты принимаешь данные в этот буфер, на лине
C
1
2
3
4
5
6
7
8
9
    struct received channel1;
    int n;
 
    n = read(
            socket,
            (void *) channel1.buffer,
            sizeof channel1.buffer
        );
    channel1.length = n;
теперь у тебя есть эта структура, в ней записаны все данные и их длина - можно разбирать

C
1
2
3
4
5
struct commands {
    short one;
    char two[5];
    unsigned long three;
};
C
1
2
3
4
5
6
7
#include <string.h>
 
...
    
    struct commands cmdlist;
 
    memcpy(&cmdlist, channel1.buffer, sizeof cmdlist);
потом можно брать уже каждую команду
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
...
 
    printf(
        "%hd"
        " "
        "%c"
        " "
        "%lu"
        "\n",
        cmdlist.one,
        *cmdlist.two,
        cmdlist.three
    );
Добавлено через 33 минуты 50 секунд
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct x {
        short one;
        char two[5];
        unsigned long three;
    };
    
    char buffer[100] = {
        0x0A, 0x0F,
        0x0B, 0x0B, 0x0C, 0x0C, 0x0A,  0x0A,
        0x1B, 0x0B, 0x0C, 0x0F,
         
        0x0A, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C,
        0x0A, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C,
    };
C
1
2
3
4
5
    struct x cmdlist;
 
    memset(&cmdlist, 0, sizeof cmdlist);
    
    memcpy(&cmdlist, buffer, sizeof cmdlist);
проверил у себя - там отметил, копируется всё до пустой строки, записывает в переменные в обратном порядке (вроде только char'ы идут прямо) и один байт идёт под заполнение
последнее unsigned long из
0x1B, 0x0B, 0x0C, 0x0F
превратится в
0x0F, 0x0C, 0x0B, 0x1B

там можно оборачивать при упаковке ещё или сразу после упаковки, чтобы они по сети пошли в нужном виде, чтобы при распаковке сразу читать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2009, 05:51

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему. Скрипт TCP-клиента на сцене: ...

Реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения
Всем привет, подскажите как можно реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения?

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...

Подскажите самый простой пример TCP клиента и TCP сервера
Подскажите пример самого простого TCP клиента и TCP сервера.

Asio deadline_timer и tcp::socket отослать асинхоронно по tcp по таймеру
Здравствуйте. Цель по tcp соединению отсылать через равные промежутки времени сообщение одно и тоже. Слушать соединение. Цель 2 (не...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru