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

Вниз

Нужна помощь по сокетам (открытие, закрытие, отправка сообщений)   Найти похожие ветки 

 
AlexV   (2003-10-29 08:39) [0]

Hi, All!

В статьях данного сайта не смог найти ответ на свой вопрос.
Мне известен список IP адресов локальной сети(массив IP), на которые нужно
разослать некоторую текстовую строку "ABC". Если на той машине
запущена программа с ServerSocket, то она примет мое сообщение и
ответит мне, а я приму ответ и помечу у себя, что "ответ пришел" (user online), если не пришел, то (user offline).

Делаю так:

For i:=0 to 9 do
begin
if ClientSocket1.Active then ClientSocket1.Close;
ClientSocket1.Host:=IP[i]; // берем очередной адрес IP из массива известных мне IP адресов локалки
ClientSocket1.Port:=1010;
ClientSocket1.open; // открываем сокет
ClientSocket1.Socket.SendText("ABC"); // отправляем сообщение
ClientSocket1.close; // закрываем сокет
end;

Но это не работает, т.к. ClientSocket1.open; не переведет сокет в
Active=True(а переведет только после всех операторов программы) и ClientSocket1.Socket.SendText("ABC") не выполнится :-(

1) Как сделать, чтобы open сработало моментально, до того, как будут выполняться следующие операторы ?

2) Можно ли ловить ошибки прямо здесь, а не в обработчиках OnConnect, OnError ?

Заранее благодарен, AlexV


 
Digitman   (2003-10-29 09:32) [1]


> 1) Как сделать, чтобы open сработало моментально, до того,
> как будут выполняться следующие операторы ?
>
> 2) Можно ли ловить ошибки прямо здесь, а не в обработчиках
> OnConnect, OnError ?


перед первым открытием кл.гнезда (до входа в цикл) установи св-во

ClientSocket1.ClientType := ctBlocking;


тогда

with ClientSocket1 do
begin
if Active then Close;
ClientType := ctBlocking;
For i:=0 to 9 do
begin
Address :=IP[i];
Port:= 1010;
try
Open;
try
Socket.SendText("ABC");
finally
Close;
end;
except
on e: Exception do
ShowMessage(e.message);
end;
end;

при этом "моментально" или не "моментально" выполнится Open - зависит от конкретных сетевых условий


 
AlexV   (2003-10-29 10:14) [2]

Спасибо Digitman :-)

Может еще знаешь, как зная имя машины, получить его IP с помощью этого же компонента TClientSocket (или TServerSocket) ?

Если это невозможно, то как проще всего ?


 
AlexV   (2003-10-29 10:18) [3]

А вот уже нашел :-)
ClientSocket1.Socket.LocalAddress

Вопрос еще:
Как установить TimeOut на посылку сообщений через ClientSocket1 или на .open ?


 
Digitman   (2003-10-29 10:29) [4]


> ClientSocket1.Socket.LocalAddress


это из другой оперы


> Как установить TimeOut на посылку сообщений через ClientSocket1
> или на .open ?


о каком тайм-ауте речь ведешь ? что под сим подразумевается ?


 
AlexV   (2003-10-29 10:40) [5]

т.е. хочу, чтобы .open делалось не 5 секунд, а всего одну.
Считать, что если за секунду соединения не произошло, то тот комп выключен или прога SocketServer у него не запущена или такого компа в локалке вообще нет.
А то если список IP большой, то для его проверки нужно будет много времени.


 
Digitman   (2003-10-29 11:05) [6]


> т.е. хочу, чтобы .open делалось не 5 секунд, а всего одну


многого хочешь) ... еще раз повторяю - время работы механизма установления коннекта зависит от многих факторов, в 1-ю очередь - от сетевой конфигурации


> Считать, что если за секунду соединения не произошло, то
> тот комп выключен или прога SocketServer у него не запущена
> или такого компа в локалке вообще нет.


неверно так считать.
хост может присутствовать, и серверная часть на нем активна, но процедура коннекта по вышеуказанным причинам может занимать заранее неизвестное время


> если список IP большой, то для его проверки нужно будет
> много времени.


организуй проверки в доп.код.потоках, пусть попытки коннектов сразу к нескольким хостам будут осуществляться параллельно



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
6-86483
arche
2003-10-27 09:25
2003.12.26
Как подгружать картинки в страницу, которую генерит TСPServer?


14-86514
ghg
2003-12-04 11:57
2003.12.26
вопросы про IDE


14-86513
euru
2003-11-12 15:37
2003.12.26
Виртуальные классы


1-86332
Alexest
2003-12-15 15:28
2003.12.26
помогите с ActiveX Control


1-86444
Вадим
2003-12-13 09:57
2003.12.26
Получить выделенный текст в текстовом поле чужого окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский