Главная страница
    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.042 c
15-1142288276
Нужна помощь
2006-03-14 01:17
2006.04.02
Нужен компонент аналогичный TRxCalc, только, чтобы мышкой можно


15-1141710789
WondeRu
2006-03-07 08:53
2006.04.02
IIS + SSL


3-1139211904
Fynjy1984
2006-02-06 10:45
2006.04.02
Вычисляемое поле


15-1141377982
Некто
2006-03-03 12:26
2006.04.02
хех =) Баян наверно


2-1142878277
Urvin
2006-03-20 21:11
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский