anonymous
написал 24 марта 2005 года в 01:23 (736 просмотров)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
Здравствуйте.
Если я не проставляю свойство active TClientSocket-а в true перед исполнением программы, а уже в коде при исполнении, то при посылке месседжей к серверу свойство connected то истинно, то ложно, при том строго чередуется. Таким образом, доходит только половина всех месседжей.
Если кто может помочь и объяснить причину, буду очень благодарен.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
TCllient/server socket — это ужасно корявая вещь.
Пользую Winsock, он менее корявый.
Отладчик/отладочные printf().
Подожди-ка, а разве TClient/server socket не является классом для работы с библиотекой Winsock ?
А можно поподробнее?
Просто пишешь на экран состояние объекта тогда, когда, по твоему мнению, состояние должно меняться.
В юниксовой среде это — обычное явление. Ибо gdb создает тепличные условия для работы программы и , как следствие, отладить ничего не получается.
А если уверен, что дебуггер тебе поможет — ну, что делать, используй. :-)
Это кривой недодебугер ваще мало чего показать может.
PS
WinSocks под UNIX ИМХО еще нету:)
Серьезно ? И что же в нем кривого ?
А каким образом оно может там быть вообще ? ;-)
А как на счет кусочка кода.
На сколько я понимаю речь идёт о продукции компании Borland (вроде всё работает нормально).
А что собственно за задача , может можно проще сделать.
>Серьезно ? И что же в нем кривого ?
Очень не тривиальная методика использования. + мне лично не нравится, включая костыли ввиде Insigth. Plz, давай не будем развивать это тему. Если тебе нравится — я рад. :)
Всем спасибо за ответы, я, кажется, разобрался.
Речь идет, если кто еще не понял, о C++ Builder.
Дело в том, что Open() коннектится как-то не сразу, а через некоторое время. Причем приложение должно это некоторое время пребывать в простое. Если сразу после Open() что-нибуть делать с сокетом, то ничего не выйдет. Я поставил таймер, который дает добро на посылку месседжей через секунду. Причем, как я уже сказал, важно, чтобы эту секунду ничего больше не происходило. Теперь все работает, вроде бы, нормально.
Однако, странное поведение. Делаю все правильно, кажется.
Кстати, кто-то может подсказать более легкий способ приостановить выполнение проги? (Что-нибудь типа delay в Паскале)
А фиг знает чем он является, но он ОЧЕНЬ кривой.
P.S.: Winsock по сравнению с UNIX соктами тоже фуфло.
Не совсем понятно, какое отношение имеет билдер к юниксам. ;-)
sleep?
Все фигня, кроме пчел ;-)
Да не вопрос ;-) Дебаггеры лучше вообще не использовать.
Т.е. он отвечает true, а сокет не открыт?
А он void.
А кто вообще говорил о юниксах?
Ну хоть какой-нить признак того, что все проканало есть?
Нет никакого признака. Connected — это и есть признак. А он true только спустя секунду.
Ну логично предположить что оно коннекстится не сразу. Просто обычно существует некий ассихронный механизм типа эвентов