Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Sockets синхр/асинхр., блокирующие/небл. |
Посл.ответ | Сообщение |
|
Создано: 22 ноября 2006 04:07 · Поправил: AlexZ · Личное сообщение · #1 Добрый день, не могли бы знающие поделиться информацией (вкраце) о сокетах, их видах, и принципах работы каждого. Мне было бы очень интерсно узнать как сделать многопотоковое сероверное приложение при помощи TServerSocket Delphi. Или может не так... моя задача - написание сервера, на котором должна быть автризация, и который мог бы работать многими клиентами. Предполагаю, что эо можно сделать в делфи на событие OnGetThread. А как считывать с порта в этом случае - не знаю. В сети по этому поводу одна статья (по которой я не особо разобрался). При попытке поискать схожие вопросы на форумах, натыкался на ответы в виде цитаты этой единственной статьи. ХХХХ://www.cod enet.ru/progr/delphi/stat/TServerSocket.php (не забудьте убрать пробел) ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 22 ноября 2006 06:50 · Личное сообщение · #2 AlexZ пишет: не могли бы знающие поделиться информацией (вкраце) о сокетах, их видах, и принципах работы каждого. информации в сети предостаточно - google, man socket, msdn AlexZ пишет: как сделать многопотоковое сероверное приложение при помощи TServerSocket Delphi например открываеш koders.com, выбираеш Languages:Delphi, в строку поиска TServerSocket, Licenses выбираеш к которой душа лежит и смотриш примеры |
|
Создано: 22 ноября 2006 08:56 · Личное сообщение · #3 AlexZ Если будешь делать сервер на компонентах Дельфи, то удобней всего юзать Indy. Там отдельный поток автоматически создается для каждого клиента. Книжица от авторов Indy Глубины Indy http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.pdf&file_id=IndyInDepth ----- Все говорят что мы вместе. Но не многие знают в каком. |
|
Создано: 22 ноября 2006 08:57 · Поправил: s0larian · Личное сообщение · #4 AlexZ IIRC в Делфи просто возьми готовый компонент и получишь TCP/IP сервер - такого кода туева хуча. Для первого прототипа это лучший способ. Ну а когда захочешь написать всё сам, то делать надо вот что: a) WSAStartup() b) create a socket: WSASocket() c) bind() d) listen() Ну а потом (в случае с blocking sockets) в отдельном потоке вызываешь select() и ждёшь. При новом соединении делаешь accept() и потом опять в select(). То есть, тебе нужен цикл - отдаёшь select() все свои сокеты, и каждый раз когда возвращается - это новое событие. Каждый сокет (и ессно connection) сигналят о новых данных, или о закрытии, и т.д. Ну а главный слушающий сокит - про новые соединения. |
|
Создано: 22 ноября 2006 22:09 · Личное сообщение · #5 |
|
Создано: 23 ноября 2006 02:37 · Личное сообщение · #6 AlexZ fix200 пишет: не делай сервер на ТСерверСокете, сделай сразу на чистом winSock'e. Это важно! +1 Создавать поток на кажое новое соединение - не очень продуктивно, если 1000 клиентов - 1000 потоков, вместо обработки запросов система будет переключать контектсы потоков Есть хорошая статья Программирование сокетов в Linux - там есть и синхронные(блокирующие) и асинхронные (неблокирующие) сокеты rsdn.ru/article/unix/sockets.xml На в Linux не обращай внимания, все справедливо и для Win, только добавить WSAStartup и WSACleanup, хотя автор и оговаривает различия socket API и Winsock API. |
|
Создано: 23 ноября 2006 03:13 · Личное сообщение · #7 Если будешь делать на WinSock'e вот две неплохие статьи --> Использование сокетов в Delphi . Часть первая: стандартные сокеты <-- http://delphikingdom.ru/asp/viewitem.asp?catalogid=1021 --> Использование сокетов в Delphi. Часть вторая: сокеты Windows <-- http://delphikingdom.ru/asp/viewitem.asp?catalogid=1060 ----- Все говорят что мы вместе. Но не многие знают в каком. |
|
Создано: 23 ноября 2006 07:45 · Личное сообщение · #8 SeDoYHg, пожизненный тебе респект с плюшками за ссылки! amely & s0larian, я бы с радостью вник во все аспекты сетевого программирования, но время не позволяет (тем более пользоваться АПИ и изобретать велик, пусть и крутой), а ситуация требует, и тербует быстро и качественно. Последнее в свою очередь видится мне как использование компонентов и наличая грамотных сорцев, дабы было куда подсмотреть. В общем, не до winSock мне пока, хоть бы кратенько теорию изучить. fix200, если откажусь от этого сокета, то альтернативой вижу только indy.. SeDoYHg пишет: Ранг: 77.7 (постоянный) йомаё.. юбилей ;) ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 27 ноября 2006 09:53 · Личное сообщение · #9 |
eXeL@B —› Программирование —› Sockets синхр/асинхр., блокирующие/небл. |