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

Связь по TCP

28.07.2009, 13:42. Показов 6941. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru