PDA

Просмотр полной версии : SysSockInetAddr



lazy
22.05.2012, 12:33
Добрый день!
Что должна возвращать функция SysSockInetAddr? У меня все время возвращает 0. Например:
dn: DINT;
dn:= SysSockInetAddr( '10.0.0.7' ); (* dn = 0 *)
Задался вопросом потому что никак не могу дождаться TRUE от SysSockConnect... )
Спасибо.

lazy
22.05.2012, 13:14
да... новички они такие....
спрашиваешь одно, а они отвечают другое... ))

Кто ответит НОЛЬ корректный ответ от SysSockInetAddr? Функция возвращает НОЛЬ в двух проектах, со стороны клиента и со стороны сервера. Соответственно не конектяца оба... ))

lazy
22.05.2012, 14:42
Посмотреть в какой DWORD будет конвертировать другой скормленный STRING ))

lazy
22.05.2012, 18:06
Неа. А что должна возвратить SysSockCreate? Я так понимаю манипулятор (адрес в памяти ПЛК) созданного сокета. У меня SysSockCreate возвращает 1 (это даже не SOCKET_INVALID). Это к вопросу о количестве созданных (и не закрытых) сокетов. Сколько их не создавай все равно возвращает 1... ))
В какую сторону копать? ))

lazy
23.05.2012, 09:57
Ну да. В библиотеке можно лишь посмотреть порядок вызовов функций. А вот проверки того, что они исполнились не подходят совсем. Функции возвращают совсем не то, что от них ожидаешь. Связь появилась, но SysSockInetAddr так и не заработала, от SysSockConnect так true и не дождался. По ходу так же криво устроены и (*ошибся*), и SysSockListen. Может я и не прав, но true от них так и не видел. SysSockInetNtoa по ходу тоже не работает совсем. Посмотреть IP клиентов на сервере пока так и не смог. Разработчики, я не прав? У Вас все работает? "На что" Вы, проверяете функции? Что я делаю не так? ))

lazy
23.05.2012, 10:45
Меня терзают смутные сомнения, что для PLK100.K-M, код по ссылке работать не будет. Потому что:

IF SysSockConnect( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) ) THEN
(* Ok*) - здесь оказаться так и не смог;
ELSE
(* Error *);
END_IF;

пока работает так:
IF BOOL_TO_INT( SysSockConnect( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) ) ) < 0 THEN
(* Error *);
ELSE
(* Ok *);
END_IF;

Так же поступаю и с (*ошибся*), и с SysSockListen. Но хотелось бы гарантий, что связь не будет зависеть от погоды... ))

lazy
24.05.2012, 09:27
Как перевести IP адрес из строки в DWORD?
Например '10.0.0.8' это 16#0A000008 ?

lazy
24.05.2012, 10:04
capzap, запиште мне 10.0.0.8 DWORD'ом "или хотя бы четырмя байтами" )
я спросил это 16#0A000008 ? )

lazy
24.05.2012, 11:10
Я ходил по всем ссылкам. Читал библиотеки. И не только. не ра бо та ет ))
В блокирующем режиме связь иногда появлялась. обмен шел. но это вероятно было случайно. и не знаю каким образом. потому что вызовом SysSockAccept можно узнать IP клиента и этот вызов должен (как я понимаю) возвратить манипулятор сокета отличный от манипулятора сокета сервера. такого не происходило. ) эту тему можно считать закрытой SysSockInetAddr не работает. ))