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

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

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

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

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

Здравствуйте , уважаемые программисты.
Я начинающий программист и моя задача состоит в том, чтобы обеспечить связь сервера на котором установлена программа и микроконтроллера, которой по GSM-модему устанавливает TCP-соединение и передает некоторые данные.
Мне необходимо написать программу , которая бы могла слушать порт и принимать данные от контроллера, записывать их в файл. Почитал немного про Indy, но там похоже устанавливается связь Client-Server, то есть программа должна стоять на обоих устройствах. У меня программа ставится только на серверную машину.
Подскажите каким образом можно решить данную задачу , буду благодарен за любую помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 13:42     Связь по TCP
Посмотрите здесь:

Соединение tcp client и tcp server - C++
accept(); bind(); connect(); listen(); socket(); Нужно расположить их в порядке в каком их вызывает (А) сервер (Б) клиент, чтобы...

TCP клиент/сервер - C++
Здравствуйте, прошу вашей помощи) нашел реализацию TCP клиента/сервера, все работает, но есть одно "но". IP адрес в коде прописан через...

Tcp/ip подключение к программе - C++
Написал простое приложение сервер+клиент, передача данных осуществляется по протоколу tcp. Когда комп подключен к интернету (ip выдается...

Работа с TCP/IP протоколами - C++
Здравствуйте! Хочу реализовать свою идею. Но не знаю с чего начать. Подскажите пожалюста, на каком языке лучше написать такую прогу, или...

WinSock tcp client/server - C++
Может у кого то есть пример простой реализации client/server на winsock ? неважно на каком языке. Мне надо что бы сервер отправлял...

Общение игрострой TCP/UDP - C++
Привет всем! Как написать чат, сериализовывать и десериализовывать я знаю. Передавать файлы по FTP. Тоже НЕ могу понять что передавать...

TCP/IP передача писем от сервера клиенту - C++
Есть простейший почтовый сервер и почтовый клиент. Взаимодействие реализовано с помощью отправки констант, означающие например "отправить...

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

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

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

Ну вот начали с написания программы, закончили логом почтового сервера.....
написал бы простенький TCP сервер и не извращался бы так.....я же тебе дал статью где все разжевано и есть готовые примеры.....
Проблема в том, что если я подключаю модем и выхожу с компьютера в интернет через этот же модем,через терминальную программу даю команды посылки этих символов, то все пишется прекрасно. А если через контроллер, то приходит пустая строчка. Мне это непонятно. А по поводу сервера, зачем, если есть готовые программы,бесплатные и имеющие те функции, которые мне нужны
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2009, 05:51     Связь по TCP
Еще ссылки по теме:

отправка сообщений по TCP на одном компьютере - C++
Добрый день. Хочу сделать что то типа соединения клиент-сервер но на одном компьютере. Соответственно делаю соединение по адресу...

TCP клиент, ошибка при компиляции - C++
в чем может быть проблема может в "ws2_32.lib"? #include <iostream> #include <stdio.h> #include <string.h> #include <winsock2.h> ...

Можно ли по TCP отправить несколько JSON и принять соответственно? - C++
можно ли по TCP отправить несколько JSONов и принять на сервере соответственно??

Связь списков - C++
Доброго времени суток, В процессе решения задачи, встретилась проблема: есть структура struct TStruct { std::string *...

С++ , связь программ - C++
Добрый день, уважаемый форумчане. Хотелось бы потолковать с вами на такую тему: Я - начинающий программист, расскажите мне, каким образом...


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

Или воспользуйтесь поиском по форуму:
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.08.2009, 05:51     Связь по TCP #26
Цитата Сообщение от 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

там можно оборачивать при упаковке ещё или сразу после упаковки, чтобы они по сети пошли в нужном виде, чтобы при распаковке сразу читать
Yandex
Объявления
01.08.2009, 05:51     Связь по TCP
Ответ Создать тему
Опции темы

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