Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.071 c
2-1142841790
RomanH
2006-03-20 11:03
2006.04.02
Ввод в MaskEdit


15-1142254134
Ironkad
2006-03-13 15:48
2006.04.02
вопрос


2-1142761103
andrea
2006-03-19 12:38
2006.04.02
Кодирование


3-1139213959
Afanasiy
2006-02-06 11:19
2006.04.02
Delphi 5 & ADO


4-1137428016
sicilla
2006-01-16 19:13
2006.04.02
Доступ к com1