Как да получите достъп до сокет, като знаете 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 към дескриптора на сокета. Ускорението е голямо.

добре, поне не преди инфрачервена връзка