Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 37

Тема: SysLibSockets

  1. #1

    По умолчанию SysLibSockets

    Вопрос возник небольшой о функциях этой библиотеки. Скачал я пример Веб - Сервера. Он работает, но если разбираться дальше. Очень странно как то.
    для того что бы соккет работал, нужно его создать(SysSockCreate), установить соединение(SysSockConnect),связать его с локальным адресом(SysSockBind),ну и можно вызвать функцию(SysSockIoctl), для управления режимом I/O сокета.
    Из всех вышеописанных функций работаю только 2 : SysSockCreate и SysSockBind. Хотелось бы узнать почему остальные не работают.
    Еще такой вопросик ...
    по работе веб сервера получается что он считывает хтмл файл c контролелра в буфер, затем перебирая по символу содержимое буфера находит переменные и заменяет их значениями из символного файла. И потом выдаёт на отправку. Но здесь есть небольшоя проблемма, иногда происходит изменение кода хтмп файлов, такое чувство что открывает их и на чтение и на запись, хотя в коде сервера написано что открытие происходит только на чтение.Соотвественно вопрос , поясните как это он может менять код файлов?? Может я чего не понимаю .. или не знаю )) так скажите где почитать и разобраться во всем )

  2. #2

    По умолчанию

    1. SysSockIoctl - работает, но как вы хотите увидеть работу блокирующего режима?
    2. SysSockConnect - тоже.

    С изменением html -как это выражается?

  3. #3

    По умолчанию

    Тогда буду благодарен если вы укажете ошибку в данном куске кода.
    если все работает, то переменное temp и temp1 должны принимать значение TRUE, а переменная temp2 , должна принимать значение 0 при ошибке, и 1 при правильном функционировании(если я все правильно понял). Однако происходит все наоборот.
    socket:=SysSockCreate(SOCKET_AF_INET,SOCKET_STREAM ,SOCKET_IPPROTO_TCP);
    tcp_adr.sin_family:=SOCKET_AF_INET; tcp_adr.sin_port:=80;
    tcp_adr.sin_addr:=SOCKET_INADDR_ANY;
    temp:=SysSockConnect(socket,paddr,SIZEOF(tcp_adr)) ;
    paddr:=ADR(tcp_adr);
    res:=SysSockBind(socket,paddr,SIZEOF(tcp_adr));
    temp1:=SysSockListen(socket,1);
    paddr:=ADR(accept_adr);
    param_ctrl:=1;
    temp2:=SysSockIoctl(socket,SOCKET_FIONBIO,ADR(para m_ctrl));
    status:=1;

    Насчет хтмл, да просто заливаю страничку на контроллер , и в один прекрасный момент обнаруживаю, что в файле появляются дополнительные строчки. хотя их там не должно быть. Поставил очистку буффера до считывания файла и после того как он отправлен на соккет, кажется эта проблемма исчезла. Но просто интерсно как такое может быть, если мы строчкой:
    file_descriptor:=SysFileOpen(file_name,'r');
    открываем файл только на чтение... и сразу после этого его закрываем.

  4. #4

    По умолчанию

    Есть предположение, что это связано с фрагментацией памяти (SysLibMem), если у вас страницы (с учетом вставки тегов) меньше 65535 лучше выделить статический байтовый массив.

    В данном фрагменте кода не совсем понятно зачем Вы вызываете Connect? Тип сокета - серверный - т.е. он должен получать запросы.

    Что будет если "открываем файл только на чтение... и сразу после этого его закрываем". Укажите Ваш контроллер, таргет и прошивку.
    Последний раз редактировалось Малышев Олег; 18.09.2007 в 11:00.

  5. #5

    По умолчанию

    да понятно что connect здесь не нужен, просто хотел сказать, что эти функции не работают. Функция listern в вашем примере не возвращает TRUE. А так как соккет у нас потоковый , а не дейтограммный, то функция эта должна быть и должна работать и возвращать TRUE.
    Насчет контроллера - ПЛК 150, прошивка - 2.01.8., таргет - 2.0-4.

  6. #6

    По умолчанию

    кстати насчет SysSockIoctl, в хелпе небольшая ошибка есть в описании, цитирую:
    SysSockIoctl
    Функция (из библиотеки SysLibSockets.lib) типа DINT, вызывает функцию ioctl операционной системы, для управления режимом I/O сокета. Возвращает TRUE при успешном окончании, иначе FALSE.
    __________________________________________________ ___
    Как это она может восвращать TRUE или FALSE, если тип функции DINT)))
    насколько я понимаю TRUE = 1 , а FALSE = 0???
    Она всегда возвращает 0, потму она не работет.

    И вообще зачем эта функция здесь ? Если и без нее прекрасно все работает ?

  7. #7

    По умолчанию

    это насчет хтмл, вот что получается иногда:
    http://213.184.244.164/table2.html.
    то что пишет мелким шрифром, того не было в начальном коде хтмл, это появилось потом.

  8. #8

    По умолчанию

    Это наша недоработка, в библиотеке CodeSys функция возвращает 0/1, а у нас (-1) или номер сокета. А так она полностью работоспособна

  9. #9

    По умолчанию

    т.е. если возвращает -1 то она сработала ? а если ноль то она не сработала ?

  10. #10

    По умолчанию

    Цитата Сообщение от mettled Посмотреть сообщение
    т.е. если возвращает -1 то она сработала ? а если ноль то она не сработала ?
    -1 и меньше - ошибка, 0 и больше - все нормально. Возвращаемый аргумент 32 битовый со знаком

Страница 1 из 4 123 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •