Текущий архив: 2006.04.02;
Скачать: CL | DM;
Внизкак обратися к сокету зная SocketHandle Найти похожие ветки
← →
user51 (2005-12-12 16:41) [0]Имеется приложение котое имеет множество входящих и исходящих соединений оновременно. используются компонетны
ClientSocket ServerSocket (stNonBlocking)
У каждого соединения знаю SocketHandle
как обратися к сокету зная SocketHandle независимо от того сервер это или клиент. Например полать данные
Socket.Sendbuf(sbuf,sbuf_len);
^^^^^^^^^^^^^^^^^^^^^^
куда тут всунуть SocketHandle чтобы послать данные в нужный
мне сокет.
← →
Digitman © (2005-12-12 18:15) [1]нахрен он тебе сдался, этот SocketHandle ?
что, идентификация партнера по соединению по его IP+порт уже не модна ?
← →
user51 (2005-12-13 09:31) [2]to Digitman
>нахрен он тебе сдался, этот SocketHandle ?
>что, идентификация партнера по соединению по его IP+порт уже не модна ?
ну-ну ни как послать этому партнеру данные - перебирать сотню сокетов
серверных и сотню клиенских пока не наткнешся на нужный ? И процедура
будет не очень то универсальной надо писать то
ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len);
to
ServerSocket1.Socket.Connections[0].Sendbuf(sbuf,sbuf_len);
да и как перебрать клиентские сокеты и как в процедуре к ним обратися например как послать в ClientSocket1 потом в ClientSocket13 что писать
if i=1 then ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len);
if i=2 then ClientSocket2.Socket.Sendbuf(sbuf,sbuf_len);
....
if i=13 then ClientSocket1.Socket.Sendbuf(sbuf,sbuf_len);
у меня мысль была хранить допустим имя партнера и его хандл в массиве и когда надо послать в сокет с нужным хендлом данные и не надо перебирать сокеты и думать ты к нему подсоединился или он к тебе просто пишешь Socket.[суда куда то хендл всунуть ]Sendbuf(sbuf,sbuf_len);
Может я ошибаюсь подскажите тогда
← →
Digitman © (2005-12-13 10:40) [3]ты вообще о чем речь ведешь ?
о серверной стороне соединения или о клиентской ?
← →
user51 (2005-12-13 10:56) [4]соединение установлено (неважно к тебе подсоединилисть или подсоединился). Оно прописывается например в массив который имеет
Имя партнера и хендл. Когда надо нужному партнеру послать данные
чтоб не парится над тем он к тебе подсоединился и какому сокету ( имеется ввиду номер коннекшена ServerSocket1.Socket.Connections[0].Sendbuf(sbuf,sbuf_len);) или ты к ему и с помощью какго нибудь из ста ClientSocket1..ClientSocket100 Просто берешь номер хендла сокета и посылаешь в него данные и все
Пример Socket.[суда куда то хендл всунуть ]Sendbuf(sbuf,sbuf_len);
надеюсь третий раз написал более понятно.
Так кто нибудь знает как послать данные в сокет зная его хендл ???
← →
Digitman © (2005-12-13 11:17) [5]
> user51 (13.12.05 10:56) [4]
чтобы "не париться", вовсе не нужно знать ни про какие хэндлы
за "связь с партнером" и на клиентской и на серверной стороне отвечают объекты класса TCustomWinSocket, тот самый который возвращает св-во ClientSocket.Socket и те самые что содержатся в списке ServerSocket.Socket.ActiveConnections
← →
Slym © (2005-12-13 11:44) [6]Digitman © (13.12.05 11:17) [5]
Человек хочет... Даду :)
send(SocketHandle, Buf, Count, 0);
recv(SocketHandle, Buf, Count, 0);
или ReadFile/WriteFile...
← →
user51 (2005-12-13 13:28) [7]>Slym ©
send(SocketHandle, Buf, Count, 0);
Да верно Slym понял правильно типа этого и надо вот я и спрашиваю есть ли такая стандартная штука. Кинте примерчик если кто знает.
to Digitman ©
>за "связь с партнером" и на клиентской и на серверной стороне отвечают >объекты класса TCustomWinSocket, тот самый который возвращает св-во >ClientSocket.Socket и те самые что содержатся в списке ServerSocket.>Socket.ActiveConnections
Все верно но что делать если необходимый патнер посоединился восьмым к сервер сокету а потом парочку которые подсоединились до него отсоединились. Вот как имменно ему послать сообщение без перебора всех сервер сокетов. ip и порт его соответсвенно мы знаем ?
Подскажи конкретно если знаешь
← →
Digitman © (2005-12-13 13:59) [8]
> необходимый патнер посоединился восьмым
Да хоть столохматым !
При этом возникло событие OnClientConnect и в метод его обработки 2-м параметром тебе был передан объект класса TCustomWinSocket, обратившись к send-методам которого в любой момент позже ты будешь передавать данные именно тому клиенту, подсоединение которого и вызвало первоначально то самое событие OnClientConnect
В дальнейшем этот объект будет фигурировать как в списке ActiveConnections (неважно под каким номером), так и 2-м параметром любого события сервера
Без перебора же объектов в каком бы то ни было списке (хоть в ActiveConnections хоть в своем собственном) для поиска в нем нужного объекта никак не обойтись - в ЛЮБОМ случае объект д.б. идентифицирован по какому-либо уник.признаку, будь то хоть хэндл хоть еще что-то
← →
user51 (2005-12-13 14:23) [9]Все ребята помогли мне - разобрался
send(SocketHandle, Buf, Count, 0);
вроде бы покатило буду дальше разбиратся
Б О Л Ь Ш О Е С П А С И Б О
← →
user51 (2005-12-13 14:23) [10]Все ребята помогли мне - разобрался
send(SocketHandle, Buf, Count, 0);
вроде бы покатило буду дальше разбиратся
Б О Л Ь Ш О Е С П А С И Б О
← →
Digitman © (2005-12-13 17:42) [11]глупо и чревато использовать WinsockAPI при наличии соответствующего Делфи-класса
← →
MultIFleX (2005-12-22 13:02) [12]Прально делаешь, в связи с оптимизацией работы сервера (моей проги ) тоже перешел с АйПи и ХостНейма на дескриптор сокета. Ускорение прекрасное...
← →
Digitman © (2005-12-22 13:17) [13]
> Ускорение прекрасное
лладно хоть не преинфракрасное
Страницы: 1 вся ветка
Текущий архив: 2006.04.02;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.059 c