Как да получите достъп до сокет, като знаете SocketHandle
Има приложение, което има много входящи и изходящи връзки едновременно. ClientSocket ServerSocket (stNonBlocking) използват се компоненти Всяка връзка знае SocketHandle как да получите достъп до сокет, знаейки SocketHandle, независимо дали е сървър или клиент. Например изпращане на данни
Socket.Sendbuf(sbuf,sbuf_len); ^^^^^^^^^^^^^^^^^^^^^ къде да поставя SocketHandle тук, за да изпращам данни към сокета, от който се нуждая .
защо, по дяволите, се отказа от теб, този SocketHandle? Какво, идентифицирането на партньор за връзка по IP + порта му вече не е на мода?
to Digitman >майната му на теб, този SocketHandle ? >какво, идентифицирането на партньор за връзка по неговия IP+порт вече не е на мода?
добре, добре, как да изпратите данни на този партньор - сортирайте сто сървърни сокета и сто клиентски сокета, докато попаднете на правилния? И процедурата няма да е много универсална, трябва да напишете ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len); to ServerSocket1.Socket.Connections[0].Sendbuf(sbuf,sbuf_len);
и как да сортирате клиентски сокети и как да ги адресирате в процедура, например как да изпратите на ClientSocket1 и след това на ClientSocket13 какво да напишете
if i=1 тогава ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len); ако i=2 тогава ClientSocket2.Socket.Sendbuf(sbuf,sbuf_len); . ако i=13 тогава ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len);
Имах идея да съхранявам например името на партньора и неговия манипулатор в масив и когато трябва да изпратиш данни към сокета с необходимия манипулатор и не е нужно да сортираш сокетите и да мислиш, че си се свързал с него или просто ти пише Socket.
Може би греша, кажи ми тогава
за какво говориш? За сървърната страна на връзката или за клиентската страна?
връзката е установена (няма значение дали сте свързани или свързани). Записва се например в масив, който има име на партньор и манипулатор. Когато трябва да изпратите данни на правилния партньор , така че да не се притеснявате дали той се е свързал с вас и какъв сокет (което означава номера на връзката ServerSocket1.Socket.Connections[0].Sendbuf(sbuf,sbuf_len);) или вие към него и с помощта на един от стоте ClientSocket1..ClientSocket100 поставете манипулатора някъде ]Sendbuf(sbuf,s buf_len); Надявам се, че го написах по-ясно за трети път. Някой знае ли как да изпрати данни към сокет, като знае неговия манипулатор.
за да "не се къпете", изобщо не е нужно да знаете за никакви дръжки
Обектите от клас TCustomWinSocket отговарят за „комуникацията с партньор“ както от страна на клиента, така и от страна на сървъра, същият, който връща свойството ClientSocket.Socket и същите, които се съдържат в списъка ServerSocket.Socket.ActiveConnections
>>обектите от класа TCustomWinSocket са отговорни за „комуникацията с партньор“ както от страна на клиента, така и от страна на сървъра, същият, който връща свойството >ClientSocket.Socket и тези, които се съдържат в списъка ServerSocket.>Socket.ActiveConnections Точно така, но какво да направите, ако необходимият партньор се свърже осми към гнездото на сървъра и след това двойка, която се свърза, преди да се прекъсне. Ето как да му изпратите съобщение, без да минавате през всички сокет сървъри. ip и неговия порт, съответно, знаем ли? Кажете ми конкретно, ако знаете
> необходим партньор, свързан 8-ми
Да, дори настолна!
В същото време възникна събитието OnClientConnect и обект от класа TCustomWinSocket ви беше предаден като 2-ри параметър чрез позоваване на методите за изпращанекойто всеки момент по-късно ще прехвърлите данни точно на този клиент, чиято връзка първоначално е причинила същото събитие OnClientConnect
В бъдеще този обект ще се показва както в списъка ActiveConnections (без значение какъв номер), така и като втори параметър на всяко събитие на сървъра
Невъзможно е да се направи без изброяване на обекти във всеки списък (дори в ActiveConnections, дори във вашия собствен списък), за да търсите желания обект в него - във ВСЕКИ случай обектът трябва да бъде. идентифициран по някаква уникална характеристика, било то дръжка или нещо друго
Всички момчета ми помогнаха - разбрах send(SocketHandle, Buf, Count, 0); изглежда, че се търкаля, ще го разбера допълнително
БЛАГОДАРЯ ТИ МНОГО
Всички момчета ми помогнаха - разбрах send(SocketHandle, Buf, Count, 0); изглежда, че се търкаля, ще го разбера допълнително
БЛАГОДАРЯ ТИ МНОГО
глупаво и рисковано е да използвате WinsockAPI, ако имате подходящия клас Delphi
Правилно го правиш, във връзка с оптимизацията на сървъра (моята програма) минах и от IP и HostName към дескриптора на сокета. Ускорението е голямо.
добре, поне не преди инфрачервена връзка