На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Работа с сетью / Помогите с Socket !!!! Сделать домашней страницей Добавить в избранное Написать писмо

Помогите с Socket !!!!


»»» Pavel - pavel@tts.tomsk.su (23.10.00 05:11)
Как передать файл с машины на машину через Socket соединение? Как всегда нужны примеры ;-)

»»» oksana - oksana@wtgres.pssr.ru (23.10.00 07:24)
Для данной цели можно воспользоваться компонентами TNMStrmServ и TNMStrm, которые предназначены для обмена потоками данных.

Обработчик для клиента:

var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
MyStream.LoadFromFile('c:\windows\рабочий стол\demo.txt');
NMStrm1.PostIt(MyStream);
MyStream.Free;
end;

Обработчик для сервера:

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
MyStream.CopyFrom(strm,NMStrmServ1.BytesTotal);
MyStream.SaveToFile('c:\windows\рабочий стол\demo2.txt');
end;

С уважением, Оксана

»»» shi - shi@tts.tomsk.su (23.10.00 11:44)
Простите за глупый вопрос, но где взять TNMStrmServ и TNMStrm.

»»» oksana - oksana@wtgres.pssr.ru (23.10.00 12:51)
В пятой дельфе (Enterprise) есть данные компоненты. Они находятся на вкладке FastNet
С уважением, Оксана

»»» pavel - pavel@tts.tomsk.su (23.10.00 13:58)
А если использовать TpowerSock то тогда как передать файл?

»»» oksana - oksana@wtgres.pssr.ru (23.10.00 14:55)
На сколько мне не изменяет память, там возникают праблы с размерами файлов. Хотя попробывать стоит. Ведь там так же существуют методы для работы с потоками (чтение, запись).
С уважением, Оксана

»»» Pavel - pavel@tts.tomsk.su (24.10.00 19:23)
А как организовать двусторонний обмен файлами ведь если я правильно понял то при помощи TNMStrmServ и TNMStrm поток инициируется со только стороны клиента.
Одним словом передомной следующая задача: Программа клиент должна связаться с сервером передать ей файл потом запросить и принять определенный файл.

»»» oksana - oksana@wtgres.pssr.ru (25.10.00 05:28)
Тогда можно писать по аналогии с Chat, пример которого присутствует в Demos.
Таким образом, приложение у тебя выступает и в роли сервера и в роли клиента (два в одном), в зависимости от действий.

С уважением, Оксана

»»» pavel - pavel@tts.tomsk.su (25.10.00 05:47)
А каким компанентом лучше воспользоваться?

»»» oksana - oksana@wtgres.pssr.ru (25.10.00 05:58)
Для этих целей я использовала, выше названные, TNMStrmServ TNMStrm.
С уважением, Оксана

»»» pavel - pavel@tts.tomsk.su (25.10.00 07:09)
TNMStrmServ и TNMStrm как я понял не позволяют делать двусторонний обмен или я не прав, и как от клиента к серверу передать запрос типа "sendfile C:\text.txt"

»»» oksana - oksana@wtgres.pssr.ru (25.10.00 07:42)
Вы правы. Клиент (TNMStm)- предназначен для отправления данных серверу (в данном случае потоков). А сервер для получения.
Но ничего не может помешать в приложении вывесить эти два компонента, каждый из которых будет выполнять свои функции, при этом следует изменять свойство Host, каждого из них. Для правильного функционирования.

С уважением, Оксана

»»» pavel - pavel@tts.tomsk.su (25.10.00 08:05)
Нехотелось бы на клиентской части размещать TNMStrmServ в целя безопасности. Может еще какой вариант посоветуете.

»»» oksana - oksana@wtgres.pssr.ru (25.10.00 08:38)
А какие проблемы с безопасностью???
Обработчиков навесить и все в порядке. Активизировать компоненты при необходимости.
Тогда можно попробывать использовать TPowerSock. В нем в неопубликованном виде, присутствуют события TNMStrm
а также следующие методы procedure CaptureStream(MainStream: TStream; Size: longint); чтение из сокета данных и помещение их в поток;
procedure CaptureFile(FileName: String); //// помещение в файл;
procedure SendFile(FileName: String);
procedure SendStream(MainStream: TStream);
В хелпе есть примеры по их использованию

С уважением, Оксана

»»» pavel - pavel@tts.tomsk.su (25.10.00 09:57)
Всеже компанент TPowerSock больше подходит. Но тут возникает вопрос "Какое событие происходит на сервере при получении от клиента к примеру строки,а не потока"

»»» oksana - oksana@wtgres.pssr.ru (25.10.00 10:36)
Данные передаются пакетами (порциями), поэтому не столь выжно, что это поток или строка.
В момент приема очередной порции данных возникает событие:
property OnPacketRecvd: TNotifyEvent;

С уважением, Оксана
»»» Mike Goblin - mgoblin@mail.ru (25.10.00 10:42)
А может быть проще FTP сервер поставить и не заниматься изобретением велосипеда,
С уважением, Mike Goblin

»»» pavel - pavel@tts.tomsk.su (25.10.00 12:27)
А где взять компанент для FTP сервера?

»»» Mike Goblin - mgoblin@mail.ru (25.10.00 13:08)
В Win NT а еще лучче в Linux есть уже готовые сервера FTP
Настаиваешь права доступа пользователей
и с помощью Internet Explorer или Netscape или еще какого браузера имеешь пересылку файлов туда-сюда без всякого геморроя и в пределах локалки, а если есть статический IP в Inete - хоть по всему шару. Если уж совсем невмоготу и хочется что-то сваять на Делфи на закладке FastNet берешь NMFTP и лепишь клиента, там все до безобразия просто.

»»» Shi - Shi@tts.tomsk.su (28.10.00 10:52)
Как правильно описать событие OnPacketRecvd у компанента TPowerSock ведь его нет в разделе Events?

»»» oksana - oksana@wtgres.pssr.ru (30.10.00 12:02)
Для формы :procedure Powersock1PacketRecvd(Sender: TObject);
Далее:

procedure TForm1.Powersock1PacketRecvd;
begin

end;

С уважением, Оксана

-= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz