Выложите простейший проект (без сервера, CASE и т.д.), в котором я смогу повторить проблему.
Вид для печати
Выложите простейший проект (без сервера, CASE и т.д.), в котором я смогу повторить проблему.
Проблема создать простейший проект.
Удалил визуализацию и получил кучу ошибок. Мол, нету визуализации.
Ну неужели нельзя сделать проект для СПК без использования визуализации?
Буду делать еще раз.
Готово: DropMeFiles – бесплатный файлообменник без регистрации
Проблема проявляется и в этом проекте.
Вы указываете функции, что у вас размер буфера - 10000 байт, но в реальности под указатель подкладываете переменную типа STRING, которая занимает 81 байт
(по умолчанию - если макс. размер строки не указан - выделяется память под 80 символов + терминирующий ноль).
Поэтому у вас переполнение буфера происходит.
Сделайте так:
Код:...
sDataSend : STRING(10000);
...
Да. Действительно заработало. Кто бы мог подумать про гребанную строку длинной в 10к символов?!
Теперь другая проблема: у меня не открывается клиент.
Но тут, наверное, мне нужно более фундаментально подойти к проблеме.
Мне кажется, что я вообще не догоняю как строить эти программы.
Вот можно открыть сокет так:
Код:
CASE bState OF
05: // Формируем строку для отправки
// Тут мы уже разобрались, оказывается надо строку делать с длинной в 10к символов.
bState := 10;
10: // создаем TCP-клиента
fbTcpClient(xEnable:=TRUE, udiTimeOut:=1000, ipAddr:=stIpServer, uiPort:=uiPortServer);
IF fbTcpClient.xActive THEN
bState := 20;
ELSIF bTries > 10 OR fbTcpClient.xError THEN
bError := 10; // код шага, где произошла ошибка
xError := TRUE; // флаг ошибки
bState := 50; // Выход из автомата шагов
END_IF
20: ... // Другие шаги, через неделю до них дойдем.
Да, можно.
Вот такой вопрос.
Я открываю сокет и даю время на его открытие 10 секунд.
Но программа сразу же мне выдает ошибку TIME_OUT.
Что я делаю не так?
Вложение 64343
Получается, что ФБ TcpClient подымает флаг xError и причина этого флага лежит в eError? Их надо контролировать?
Вы ошибаетесь. Таймаут задается в микросекундах.Цитата:
Я открываю сокет и даю время на его открытие 10 секунд.
А как в отладке увидеть реальное (фактическое) время открытия?