Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизИнформация о доступных серверах! Найти похожие ветки
← →
Vigi © (2010-04-02 22:09) [0]Здравствуйте !!!
1. Delphi 2010
2. Использую TClientSocket и TServerSocket
Хочу реализовать следующие:
Написано 2 Серверных части которые используют один IP но разные порты!
задача:
Нужно сделать так чтобы при запуске клиенской части информация о доступности и готовности к работе серверов высвечивалась в listview (свойтво у ListView ViewStyle:=vsReport) тоесть Listview имеет три колонки (информация от сервера) . После чего если юзер жмет двайным кликом в listview на желаемом серере происходит коннект клиента с этим сервером!!!
подскажите как реализовать плиз!!!
← →
Anatoly Podgoretsky © (2010-04-02 22:14) [1]А спустя некоторое время, сведится что готов, а он уже давно висит.
← →
Palladin © (2010-04-03 10:18) [2]Написал аж две серверных части и до сих пор не знаешь, что проверить доступность сервера можно попытавшись к нему подключиться?
> подскажите как реализовать плиз!!!
Что именно? Все что написано или "двайной клик"?
← →
Вэн © (2010-04-03 12:38) [3]Удалено модератором
Примечание: Обсуждение модерирования
← →
Vigi © (2010-04-03 13:59) [4]
> Написал аж две серверных части и до сих пор не знаешь, что
> проверить доступность сервера можно попытавшись к нему подключиться?
> > подскажите как реализовать плиз!!!Что именно? Все что
> написано или "двайной клик"?
Нужно реализовать, что я описал выше ... особенно интерес: помещение информации о сервере(рах) в listview
ну и конечно использования по клику строки в в этом компаненте!
просто с Listview раньше не работал ....
а если быть конкретным то допустим сервера работают ( серверов может быть как 1 .. 100 ) на ip 90.122.11.222 соответственно порты от 1300..1400
а порты серверов могут
← →
DVM © (2010-04-03 14:43) [5]
> Vigi © (03.04.10 13:59) [4]
Ну и в чем проблема. Для реализации того что ты хочешь есть 2 способа:
1) Одним клиентом пытаемся подключаться к серверам последовательно меняя порт клиента. Недостатки - медленно, достоинства - малай расход памяти независимо от количества серверов.
2) Делаем динамически массив (список) клиентов, каждый со своим портом и каждый коннектистся к своему серверу. Недостатки - нужно больше памяти пропорционально числу клиентов, достоинства - более высока якорость.
← →
Сергей М. © (2010-04-03 19:55) [6]
> а порты серверов могут
Что они "могут" ?
← →
DVM © (2010-04-03 20:14) [7]
> Сергей М. © (03.04.10 19:55) [6]
> > а порты серверов могут
>
>
> Что они "могут" ?
К нему ворвалась разъяренная толпа админов тех серверов. :) Дописать он не успел.
← →
Vigi © (2010-04-03 20:45) [8]
> > а порты серверов могутЧто они "могут" ?
Да эт ошибся :) на последнюю строчку не обрашаем внимания
← →
Vigi © (2010-04-03 20:49) [9]
> Ну и в чем проблема. Для реализации того что ты хочешь есть
> 2 способа:1) Одним клиентом пытаемся подключаться к серверам
> последовательно меняя порт клиента. Недостатки - медленно,
> достоинства - малай расход памяти независимо от количества
> серверов.
Вот это меня устроило бы ... скорость мне тут особо не нужна..
← →
Anatoly Podgoretsky © (2010-04-03 20:59) [10]> Vigi (03.04.2010 20:49:09) [9]
4 миллиарда адресов, на каждом по 65 тысяч портов.
← →
Vigi © (2010-04-03 22:21) [11]
> 4 миллиарда адресов, на каждом по 65 тысяч портов.
адрес 1
← →
Сергей М. © (2010-04-03 23:14) [12]
> адрес 1
А нахрена тогда "2 Серверных части" ?
Достаточно одной, обслуживающей два порта.
← →
Anatoly Podgoretsky © (2010-04-03 23:22) [13]
> адрес 1
Тогда тебе повезло.
← →
Vigi © (2010-04-04 05:36) [14]
> А нахрена тогда "2 Серверных части" ?Достаточно одной, обслуживающей
> два порта.
Поверте уважаемый...... надо в конечном итоге будет 4 или 5 серверных частей которые будут запускаться на одной машине.
ЗЫ: Если дадите пример где одна серверная часть обслуживает два порта тоже буду рад.
← →
Anatoly Podgoretsky © (2010-04-04 10:51) [15]Два порта, это как один порт, только два порта. У меня есть программы, которые обслуживают шесть портов.
← →
Vigi © (2010-04-04 11:58) [16]
> Anatoly Podgoretsky © (04.04.10 10:51) [15]
> Два порта, это как один порт, только два порта. У меня есть
> программы, которые обслуживают шесть портов.
а мне от того что есть у тебя легче не становится конкретные примеры где?
← →
Vigi © (2010-04-04 12:00) [17]ПРосто уже что то ушли от темы
скажите есть кто может помочь в этом: ????? с конкретными примерами?
1. Delphi 2010
2. Использую TClientSocket и TServerSocket
Хочу реализовать следующие:
Написано 2 Серверных части которые используют один IP но разные порты!
задача:
Нужно сделать так чтобы при запуске клиенской части информация о доступности и готовности к работе серверов высвечивалась в listview (свойтво у ListView ViewStyle:=vsReport) тоесть Listview имеет три колонки (информация от сервера) . После чего если юзер жмет двайным кликом в listview на желаемом серере происходит коннект клиента с этим сервером!!!
вот!
← →
Anatoly Podgoretsky © (2010-04-04 13:28) [18]> Vigi (04.04.2010 11:58:16) [16]
Код давай, а сам не можешь догадаться, как в программе иметь более одного порта.
Смешно даже. Короче у тебя программа неправильно написана.
← →
Дмитрий С © (2010-04-04 17:11) [19]Сделай обработку на сервере широковещательных (или нет) udp пакетов на определенном порту, где твои серверы будут скидывать информацию о своей готовности.
Но, сдается мне, тебе это не поможет, странного хочешь.
> Anatoly Podgoretsky
Рекорд тебе не побить. Сервер login.icq.com вроде как все порты обрабатывает.
← →
Плохиш © (2010-04-04 17:25) [20]
> конкретные примеры где?
Каждый пример - 500 евро предоплата.
← →
Игорь Шевченко © (2010-04-04 17:31) [21]Плохиш © (04.04.10 17:25) [20]
Ты третий ноль намеренно что ли пропускаешь ?
← →
MsGuns © (2010-04-04 20:01) [22]Демпингует, сволочь :)
← →
Сергей М. © (2010-04-04 20:13) [23]
> пример где одна серверная часть обслуживает два порта
Да какой тебе пример ?)
Создай в одном и том же серверном приложении д.южину объектов TServerSocket, назначь каждому из них свой номер порта - вот тебе и дюжина отдельных сервисов, предоставляемых одним и тем же приложением-сервером)
← →
Anatoly Podgoretsky © (2010-04-04 20:43) [24]> Сергей М. (04.04.2010 20:13:23) [23]
Это сложно, это не понятно, как можно несколько да в одном приложение, так нельзя.
← →
Vigi © (2010-04-04 20:44) [25]
> Сергей М. © (04.04.10 20:13) [23]
> > пример где одна серверная часть обслуживает два портаДа
> какой тебе пример ?)Создай в одном и том же серверном приложении
> д.южину объектов TServerSocket, назначь каждому из них свой
> номер порта - вот тебе и дюжина отдельных сервисов, предоставляемых
> одним и тем же приложением-сервером)
Ми так и сдлали :) вроде заработало !!!
← →
Сергей М. © (2010-04-04 20:46) [26]
> вроде заработало
А какие могли быть сомнения в этом ?)
← →
Anatoly Podgoretsky © (2010-04-04 20:50) [27]> Сергей М. (04.04.2010 20:46:26) [26]
Читаем предыдущие сообщения.
← →
Vigi © (2010-04-04 21:50) [28]Вот код:
procedure TForm2.Client0Read(Sender: TObject; Socket: TCustomWinSocket);
var
st1,st2,st3,str:string;
t: TStringList;
begin
str:= Socket.ReceiveText;
t := TStringList.create;
t.text := stringReplace(str, "_", #13#10,[rfReplaceAll]); /// инфа с первого серва
st1:=t[0];
st2:=t[1];
st3:=t[2];
t.Free;
if copy (str,1,3)="#If" then begin
ListView1.Items.Add.Caption := copy(st1,4);
client0.Active := false;
end;
end;
У меня содержимое st1 вставляется в первую колонку. Подскажите как сделать чтоб st2 шло во 2 и st3 соответственно в 3 колонку ?
← →
Сергей М. © (2010-04-04 21:54) [29]Читать справку про TListItem.Subitems
← →
Vigi © (2010-04-06 09:46) [30]Вроде пошло но есть одно но....
procedure TForm2.Client0Read(Sender: TObject; Socket: TCustomWinSocket);
var
st1,st2,st3,str:string;
t: TStringList;
begin
str:= Socket.ReceiveText;
t := TStringList.create;
t.text := stringReplace(str, "_", #13#10,[rfReplaceAll]); /// инфа с первого серва
st1:=t[0];
st2:=t[1];
st3:=t[2];
t.Free;
if copy (str,1,3)="#If" then begin
with ListView1.Items.add do
begin
Caption:=copy(st1,4);
SubItems.Add(st2);
SubItems.Add(st3);
end;
вот такой вариант проходи (работает) но он при постоянном чтении порта постоянно заносит новую строчку в listview ...
если я делаю так :with ListView1.Items[0] do
begin
Caption:=copy(st1,4);
SubItems.Add(st2);
SubItems.Add(st3);
end;
то выдает ошибку если я правильно понял выход индекса за границу :( а мне нужно чтоб было именно так.. как исправить???
← →
Сергей М. © (2010-04-06 10:06) [31]Ты не понимаешь самого главного - поточной ("конвейерной") природы протокола TCP.
Функциональный метод ReceiveText не обязан возвратить в точности ту же строку, которая была ранее отправлена передающей стороной. Переданная строка может быть прочитана целиком принимающей стороной как за один так и за несколько вызовов ReceiveText. Т.е. принимающая сторона обязана организовать тем или иным образом аккумулирующий механизм, собирающий строку из одного или нескольких последовательно поступающих с выхода "конвейера" фрагментов строки.
А у тебя этого нет и в помине, ибо ты наивно полагаешь, что каждому вызову метода SendText("СТРОКА") на стороне передатчика должен соответствать один-единственный вызов ReceiveText() на стороне приемника, якобы обязанный вернуть не иначе как ожидаемую строку "СТРОКА".
Потому и грабли.
← →
Vigi © (2010-04-06 10:21) [32]А как разрулить эти грабли?
← →
Сергей М. © (2010-04-06 10:23) [33]Реализовать алгоритм аккумуляции поступающих фрагментов в единую целую строку.
← →
Vigi © (2010-04-06 10:59) [34]с Сервера поступает текс одна строчка:
procedure TForm1.Timer4Timer(Sender: TObject);
var
infoserv:string;
i:integer;
begin
infoserv:= comandy+"_"+inttostr(server1.Port)+"_"+ label2.Caption ;
For i:=0 to Server2.Socket.ActiveConnections-1 do
begin
Server2.Socket.Connections[i].SendText("#If"+infoserv);
end;
end;
далее вот реализация этого же алгоритма но локальноprocedure TForm1.Timer1Timer(Sender: TObject);
begin
with ListView1.Items.add do
begin
Caption:=("1111");
SubItems.Add("2222");
SubItems.Add("3333");
end;
end;
end.
все работает
ну а если вот так:TForm1.Timer1Timer(Sender: TObject);
begin
with ListView1.Items.[0] do
begin
Caption:=("1111");
SubItems.Add("2222");
SubItems.Add("3333");
end;
end;
как и в сетевой части происходит ошибка вот я и спрашиваю почему что не так?
← →
Сергей М. © (2010-04-06 11:12) [35]
> с Сервера поступает текс одна строчка
Ну где же одна-то ?
Таймер у тебя тикает ? Тикает.
И при каждом тике он толкает в хвост конвейера очередную порцию строковых данных.
> что не так?
Ну как что ?
Очевидно же что 0-го элемента списка в момент тика таймера не существует - список попросту пуст)
← →
Vigi © (2010-04-06 11:25) [36]Таймер у тебя тикает ? Тикает.
И при каждом тике он толкает в хвост конвейера очередную порцию строковых данных.
Согласен!
> Ну как что ?Очевидно же что 0-го элемента списка в момент
> тика таймера не существует - список попросту пуст)
так пробовал сразу в инспекторе объекта listview создать [0] items а всеравно ошибка :(
← →
Сергей М. © (2010-04-06 11:32) [37]
> Vigi © (06.04.10 11:25) [36]
Отладчик тебе на что дан ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.077 c