Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Sockets синхр/асинхр., блокирующие/небл.
Посл.ответ Сообщение

Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 22 ноября 2006 04:07 · Поправил: AlexZ
· Личное сообщение · #1

Добрый день,
не могли бы знающие поделиться информацией (вкраце) о сокетах, их видах, и принципах работы каждого.
Мне было бы очень интерсно узнать как сделать многопотоковое сероверное приложение при помощи TServerSocket Delphi. Или может не так... моя задача - написание сервера, на котором должна быть автризация, и который мог бы работать многими клиентами. Предполагаю, что эо можно сделать в делфи на событие OnGetThread. А как считывать с порта в этом случае - не знаю. В сети по этому поводу одна статья (по которой я не особо разобрался). При попытке поискать схожие вопросы на форумах, натыкался на ответы в виде цитаты этой единственной статьи.

ХХХХ://www.cod enet.ru/progr/delphi/stat/TServerSocket.php (не забудьте убрать пробел)

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 19.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 22 ноября 2006 06:50
· Личное сообщение · #2

AlexZ пишет:
не могли бы знающие поделиться информацией (вкраце) о сокетах, их видах, и принципах работы каждого.

информации в сети предостаточно - google, man socket, msdn

AlexZ пишет:
как сделать многопотоковое сероверное приложение при помощи TServerSocket Delphi

например открываеш koders.com, выбираеш Languages:Delphi, в строку поиска TServerSocket, Licenses выбираеш к которой душа лежит и смотриш примеры



Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 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

-----
Все говорят что мы вместе. Но не многие знают в каком.





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 22 ноября 2006 22:09
· Личное сообщение · #5

не делай сервер на ТСерверСокете, сделай сразу на чистом winSock'e. Это важно!



Ранг: 19.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.



Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 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

-----
Все говорят что мы вместе. Но не многие знают в каком.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 23 ноября 2006 07:45
· Личное сообщение · #8

SeDoYHg, пожизненный тебе респект с плюшками за ссылки!
amely & s0larian, я бы с радостью вник во все аспекты сетевого программирования, но время не позволяет (тем более пользоваться АПИ и изобретать велик, пусть и крутой), а ситуация требует, и тербует быстро и качественно. Последнее в свою очередь видится мне как использование компонентов и наличая грамотных сорцев, дабы было куда подсмотреть. В общем, не до winSock мне пока, хоть бы кратенько теорию изучить.
fix200, если откажусь от этого сокета, то альтернативой вижу только indy..

SeDoYHg пишет:
Ранг: 77.7 (постоянный)

йомаё.. юбилей ;)

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 ноября 2006 09:53
· Личное сообщение · #9

AlexZ эх ёлки, ну gogole же спроси... я с делфи не имел дела с 97-го года, но сайтов пару ещё помню:
www.torry.net/pages.php?id=221
www.torry.net/pages.php?id=220


 eXeL@B —› Программирование —› Sockets синхр/асинхр., блокирующие/небл.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати