Форум: "Сети";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизСмена портов NMMsg и NMStrm Найти похожие ветки
← →
Andrew2 (2002-08-05 13:03) [0]Не хотят у меня порты меняться на этих компонентах. Как скомпилиш например с тем что по умолчанию 6711 так и работают. Присваиваю другой номер - connection failed, возвращаю родной - снова нормально. Можно конечно с другим компилировать, но надо-бы в процессе работы как-то менять, чтоб к другими такими-же програмками конектиться.
Спасибо.
← →
Digitman (2002-08-05 13:08) [1]сервер на каком порту "слушает" ? Должен слушать на том же, попытку коннекта к которому осуществляет клиент
← →
Andrew2 (2002-08-05 15:58) [2]Меняю порты с обоих сторон. Когда возвращаю в исходное состояние - конект возобновляется.
(спасибо digitman за быстрый ответ, боюсь мой промежуток в 5 часов уже убил этот диалог :(
← →
Andrew2 (2002-08-05 16:29) [3]Мне тут даже советуют убивать и создавать заново эти компоненты уже с другими портами :)
← →
Digitman (2002-08-05 16:29) [4]при смене порта на серверной стороне не забываешь вноыь активизировать его (сервер) ?
← →
Andrew2 (2002-08-05 16:45) [5]Не нашёл в структуре NMStrm активацию/деактивацию.
Попробовал disconnect перед сменой портов - не преуспел.
← →
Digitman (2002-08-05 17:19) [6]TNMStrm не имеет отношения к серверной стороне : это - клиент.
Что используешь на серверной стороне ?
← →
Andrew2 (2002-08-06 08:16) [7]NMStrmServ
← →
Andrew2 (2002-08-06 08:24) [8]Это я для работы утилиту такую написал, где на моей машине клиент с NMMsg и NMStrmServ, а на другом конце агент с NMMSGServ и NMStrm. По MSG я управляю агентом, а он мне по STRM шлёт файлы. Возникла необходимость работать с несколькими агентами, а со сменой портов такая неприятность :(
← →
Digitman (2002-08-06 09:40) [9]Приведи код.
← →
Andrew2 (2002-08-06 10:05) [10]Мой римоут менеджер запрашивает файл
procedure TForm1.Getfile1Click(Sender: TObject);
begin
LogFileName:=ListBox1.Items.Strings[ListBox1.ItemIndex];
NMMsg1.FromName := "file";
NMMsg1.PostIt(LogFileName);
MemoEvents.Lines.Add("Asking for file "+LogFileName);
end;
Агент отвечает
procedure TForm1.NMMSGServ1MSG(Sender: TComponent; const sFrom,
sMsg: String);
var
MyFStream: TFileStream;
f,f_old,f_update: Textfile;
sr,sr_old: TSearchRec;
flag,FileAttrs: Integer;
s,s2: string;
Bool:Boolean;
begin
if pos("file",sFrom)>0 then
begin
LogFileName:=Copy(sMsg,Pos(":",sMsg)+1,Length(sMsg)-Pos(":",sMsg));
EditLogFileName.Text:=LogFileName;
ListBoxFiles.ItemIndex:= ListBoxFiles.Items.IndexOf(LogFileName);
if (LogFileName="..") or isDir(LogFileName) then
begin
ListBoxFilesDblClick(Form1);
ReadList(CurrDir);
NMStrm1.FromName := "list:"+CurrDir;
MyFStream := TFileStream.Create("list.txt", fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
MemoEvents.Lines.Add("list sent");
end
else
begin
NMStrm1.FromName := "file:"+LogFileName;
MyFStream := TFileStream.Create(LogFileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
MemoEvents.Lines.Add("file sent");
MemoFile.Lines.LoadFromFile(LogFileName);
MemoFile.Lines.SaveToFile("Old_log.txt");
end;
end;
end;
end;
админ ловит файл
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
c,f,i: integer;
MyFStream: TFileStream;
f_log,f_update: TextFile;
s: string;
begin
MemoEvents.Lines.Add("From :: "+sFrom);
if Pos("file",sFrom)>0 then
begin
LogFileName:=Copy(sFrom,Pos(":",sFrom)+1,Length(sFrom)-Pos(":",sFrom));
If FileExists(LogFileName) then DeleteFile(LogFileName);
MyFStream := TFileStream.Create(LogFileName, fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
end;
MemoFile.Lines.LoadFromFile(LogFileName);
GroupBox2.Caption:=LogFileName+" "+DateTimeToStr(Now);
MemoEvents.Lines.Add("received file ""+LogFileName+""");
end;
end;
← →
Digitman (2002-08-06 10:18) [11]Я что-то не вижу, где, в какой момент и как активизируется NMMSGServ1 и NMStrmServ1MSG, т.е. серверные стороны
← →
Andrew2 (2002-08-06 10:34) [12]Сами наверно :)
Я больше ничего с ними не делаю.
← →
Digitman (2002-08-06 10:54) [13]Нет, ну а метод TPowersock.Listen() кто за тебя будет вызывать ? Каким образом серверная сторона может быть активизирована без вызова этого метода ?
Да еще и с Accept() - тот же вопрос : как ты акцептируешь и акцептируешь ли явно входящие кл.запросы на соединение ?
← →
Andrew2 (2002-08-06 10:58) [14]Пища для размышлений...
Поковыряюсь в этом направлении
Спасибо за помощь :)
← →
Sterh-By (2002-08-07 12:51) [15]Вся суть в кривости компонент FastNet.
Выдержка из хелпа для TNMStrmServ:
property Port: Integer;
...
Accessibility: Runtime*, Designtime
Notes:
* In the case of the TNMGeneralServer, the Port property must be set during designtime.
Динамически создать об"єкт не удалось :(
← →
Digitman (2002-08-07 13:01) [16]>Sterh-By
Почему сразу - "в кривости" ? Разработчик четко обозначил ограничения, с чем это связано - это уже иной вопрос.
А автор как раз, как я понял, и подразумевает смену порта именно в design-time. Нет ничего говорящего о смене порта в run-time и в приведенном им коде.
← →
Sterh-By (2002-08-07 13:35) [17]Ну, а зачем тогда такой ограниченый компонент нужен ?
Программа ведь должна настраиваться.
Я, вот пытаюсь использовать Indy для этих целей, но не могу в"ехать, как задать таймауты для функций чтения/записи.
Имеются в виду компоненты IdTCPServer & IdTCPClient.
Использую ф-ии TIdTCPConnection.ReadBuffer & TIdTCPConnection.WriteBuffer
Может кто подскажет ?
← →
Digitman (2002-08-07 14:27) [18]Та ведь - просто это, как "дважды два" !
Исходники-то есть перед глазами ? Думаю, что - должны быть, иначе - на кой черт такой Indy нужен.
Ну так глянь в них да посмотри, есть ли где-либо при инициализации гнезда строчка, вызывающаяя WinsockAPI-ф-цию SetSockOpt().
Если есть, смотри, откуда берутся параметры для установки опций
SO_RCVTIMEO int Receive time-out
SO_SNDTIMEO int Send time-out
Если - нет, можешь считать, что Indy не менее "кривой", чем FastNet.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c