PDA

Просмотр полной версии : Работа с большим кол-вом сокетов



Breg
25.11.2004, 00:13
При работе с большим кол-вом сокетов (TClientSocket) наблюдаю глюк осла, а точнее его отказ работать аж до перезагрузки компа.
Подскажите, плиз, что делать.

drmist
29.11.2004, 21:14
класс TClientSocket известен своей глючностью.
Рекомендую поставить Delphi7. там багов меньше.класса TClientSocket там нет, но и не надо.
вместо него я рекомендую использывать winsock2. его в Delphi7, увы, тоже нет, хотя разработчики обещали включить. второй сок придется искать в сети. если не найдешь - напиши. дам.

Breg
11.12.2004, 02:31
Спасибо,
Делфю новую ставить пока не спишу,
а винсокс2 сейчас поищу. :)

Иш ты рифмач какой получился из меня. :)))

Скорее всего таки прийдется Делфи7 ставить...

xpymep
16.12.2004, 17:39
Во-первых у сервера (TServerSocket) ThreadsCacheSize должен стоять побольше. Во-вторых и впрямь TClientSocket использует сокеты версии:winsock 1.1, которые отличаются большооой глюкавостью. В-третьих winsock 2 - не лучше :). В-четвертых, уж лучше работать с TCP/IP портом напрямую, чем через сокеты! Я писал чат (winsock1.1), так вот сервак держал до 10 пользователей, потом падал. Потом написал чат под линукс (используя ихний сокет, можно преобразовать сообщения от winsock1.1) сервак держал 40 пользователей спокойно (правда комп аж пыхтел от количества пользователей) и не упал.... Потом начали падать виндовые клиенты :). Так что мой совет - НЕ ИСПОЛЬЗОВАТЬ СОКЕТЫ ВООБЩЕ. Правда компоненты TClientSocket и TServerSocket были разработаны для Делфей, а я писал под Borland C++ Builder 6.

Breg
16.12.2004, 18:25
Так что мой совет - НЕ ИСПОЛЬЗОВАТЬ СОКЕТЫ ВООБЩЕ.Если можно, поясни как тогда работать по TCP/IP без сокетов. Или хотя бы ссылочку, где можно это прочитать.

Absurd
16.12.2004, 18:57
Потом написал чат под линукс (используя ихний сокет, можно преобразовать сообщения от winsock1.1)
Под Линукс сокеты те же, что и в Winsock2 (socket(),listen(), accept(), connect() etc), поскольку Winsock2 - это подчистую портированные BSD сокеты.

DeeJayC
16.12.2004, 19:35
Так что мой совет - НЕ ИСПОЛЬЗОВАТЬ СОКЕТЫ ВООБЩЕ.Если можно, поясни как тогда работать по TCP/IP без сокетов. Или хотя бы ссылочку, где можно это прочитать.
Поправка - не использовать сокеты, поставляемые с Борландом ВООБЩЕ.

omniORB, собранная под win32 открывает сокетов просто... ну очень
много. Работает - супер.

xpymep
17.12.2004, 10:24
Absurd, не знаю... у меня так не пашет, и приходиться делать один кроссплатформенный модуль, через который все работает. По другому никак :) (у мя Mandrake9.0).

Breg
17.12.2004, 21:31
Absurd, не знаю... у меня так не пашет, и приходиться делать один кроссплатформенный модуль, через который все работает. По другому никак :) (у мя Mandrake9.0).Можешь его намылить мне?:wink: Ибо я тоже кроссплатформенной свою прогу хочу сделать (у меня RedHat 9.0). И у меня по ходу дела планы возросли - я хочу не просто чат написать, а такой себе сетевой процессор, выполняющий основные функции по передаче инфы, а всё остальное выполняют плагины. Таким образом создам масштабируемое приложение. :D

Breg
17.12.2004, 21:33
omniORB, собранная под win32 открывает сокетов просто... ну очень много. Работает - супер.А под линух можно её собрать?

Breg
19.12.2004, 01:16
omniORB, собранная под win32 открывает сокетов просто... ну очень много. Работает - супер.А под линух можно её собрать?...Можно, но она под Делфи не работает...

Absurd
20.12.2004, 09:07
Absurd, не знаю... у меня так не пашет, и приходиться делать один кроссплатформенный модуль, через который все работает. По другому никак (у мя Mandrake9.0).
По - моему единственное различие - в *nix системах надо использовать <sys/socket.h>, а под виндой - <winsock2.h>.
И еще в юниксах хендлы сокетов можно передавать в read() / write(), а в виндах это делать нельзя.

Вот кроссплатформенный сокет-модуль

#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#endif