nixp.ru v3.0

23 октября 2017,
понедельник,
22:06:39 MSK

DevOps с компанией «Флант»
anonymous написал 24 марта 2005 года в 01:23 (276 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Здравствуйте.

Если я не проставляю свойство active TClientSocket-а в true перед исполнением программы, а уже в коде при исполнении, то при посылке месседжей к серверу свойство connected то истинно, то ложно, при том строго чередуется. Таким образом, доходит только половина всех месседжей.

Если кто может помочь и объяснить причину, буду очень благодарен.

Longobard

TCllient/server socket — это ужасно корявая вещь.

Пользую Winsock, он менее корявый.

anonymous
Flake
Здравствуйте.

Если я не проставляю свойство active TClientSocket-а в true перед исполнением программы, а уже в коде при исполнении, то при посылке месседжей к серверу свойство connected то истинно, то ложно, при том строго чередуется. Таким образом, доходит только половина всех месседжей.

Если кто может помочь и объяснить причину, буду очень благодарен.

Отладчик/отладочные printf().

anonymous
LONGOBARD
TCllient/server socket — это ужасно корявая вещь.

Пользую Winsock, он менее корявый.

Подожди-ка, а разве TClient/server socket не является классом для работы с библиотекой Winsock ?

anonymous
redbeard
Отладчик/отладочные printf().

А можно поподробнее?

anonymous
Flake
А можно поподробнее?

Просто пишешь на экран состояние объекта тогда, когда, по твоему мнению, состояние должно меняться.

В юниксовой среде это — обычное явление. Ибо gdb создает тепличные условия для работы программы и , как следствие, отладить ничего не получается.

А если уверен, что дебуггер  тебе поможет — ну, что делать, используй.  :-)

decvar
Ибо gdb создает тепличные условия для работы программы и , как следствие, отладить ничего не получается.

Это кривой недодебугер ваще мало чего показать может.

PS

WinSocks под UNIX ИМХО еще нету:)

anonymous
decvar
Это кривой недодебугер ваще мало чего показать может.

Серьезно ? И что же в нем кривого ?

PS

WinSocks под UNIX ИМХО еще нету:)

А каким образом оно может там быть вообще ? ;-)

iliya
Flake
Здравствуйте.

Если я не проставляю свойство active TClientSocket-а в true перед исполнением программы, а уже в коде при исполнении, то при посылке месседжей к серверу свойство connected то истинно, то ложно, при том строго чередуется. Таким образом, доходит только половина всех месседжей.

Если кто может помочь и объяснить причину, буду очень благодарен.

А как на счет кусочка кода.

На сколько я понимаю речь идёт о продукции компании Borland (вроде всё работает нормально).

А что собственно за задача , может можно проще сделать.

decvar

>Серьезно ? И что же в нем кривого ?

Очень не тривиальная методика использования. + мне лично не нравится, включая костыли ввиде Insigth. Plz, давай не будем развивать это тему. Если тебе нравится — я рад. :)

anonymous

Всем спасибо за ответы, я, кажется, разобрался.

Речь идет, если кто еще не понял, о C++ Builder.

Дело в том, что Open() коннектится как-то не сразу, а через некоторое время. Причем приложение должно это некоторое время пребывать в простое. Если сразу после Open() что-нибуть делать с сокетом, то ничего не выйдет. Я поставил таймер, который дает добро на посылку месседжей через секунду. Причем, как я уже сказал, важно, чтобы эту секунду ничего больше не происходило. Теперь все работает, вроде бы, нормально.

Однако, странное поведение. Делаю все правильно, кажется.

Кстати, кто-то может подсказать более легкий способ приостановить выполнение проги? (Что-нибудь типа delay в Паскале)

Longobard
redbeard
Подожди-ка, а разве TClient/server socket  не является классом для работы с библиотекой Winsock ?

А фиг знает чем он является, но он ОЧЕНЬ кривой.

P.S.: Winsock по сравнению с UNIX соктами тоже фуфло.

anonymous
Flake
Всем спасибо за ответы, я, кажется, разобрался.

Речь идет, если кто еще не понял, о C++ Builder.

Не совсем понятно, какое отношение имеет билдер к юниксам. ;-)

Дело в том, что Open() коннектится как-то не сразу, а через некоторое время. Причем приложение должно это некоторое время пребывать в простое. Если сразу после Open() что-нибуть делать с сокетом, то ничего не выйдет. Я поставил таймер, который дает добро на посылку месседжей через секунду. Причем, как я уже сказал,  важно, чтобы эту секунду ничего больше не происходило. Теперь все работает, вроде бы, нормально.

Однако, странное поведение. Делаю все правильно, кажется.

Кстати, кто-то может подсказать более легкий способ приостановить выполнение проги? (Что-нибудь типа delay в Паскале)

sleep?

anonymous
LONGOBARD
А фиг знает чем он является, но он ОЧЕНЬ кривой.

P.S.: Winsock по сравнению с UNIX соктами тоже фуфло.

Все фигня, кроме пчел ;-)

anonymous
decvar
>Серьезно ? И что же в нем кривого ?

Очень не тривиальная методика использования. + мне лично не нравится, включая костыли ввиде Insigth. Plz, давай не будем развивать это тему. Если тебе нравится — я рад. :)

Да не вопрос ;-) Дебаггеры лучше вообще не использовать.

decvar
Если сразу после Open() что-нибуть делать с сокетом, то ничего не выйдет

Т.е. он отвечает true, а сокет не открыт?

anonymous
decvar
Т.е. он отвечает true, а сокет не открыт?

А он void.

anonymous
redbeard
Не совсем понятно, какое отношение имеет билдер к юниксам. ;-)

А кто вообще говорил о юниксах?

decvar
А он void.

Ну хоть какой-нить признак того, что все проканало есть?

anonymous
decvar
Ну хоть какой-нить признак того, что все проканало есть?

Нет никакого признака. Connected — это и есть признак. А он true только спустя секунду.

decvar

Ну логично предположить что оно коннекстится не сразу. Просто обычно существует некий ассихронный механизм типа эвентов