Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

как обратися к сокету зная 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.046 c
11-1124198675
I_need_Help
2005-08-16 17:24
2006.04.02
Установка МСК


2-1142675514
redom
2006-03-18 12:51
2006.04.02
Модули


2-1142586057
Emik
2006-03-17 12:00
2006.04.02
Delphi


15-1141744728
mr.HelpMe
2006-03-07 18:18
2006.04.02
Что делать если я забыл свой пароль? (к админам)


1-1141215732
Radix
2006-03-01 15:22
2006.04.02
Форма сворачивается в левый нижний угол





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский