Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

TClientSocket и TServerSocket   Найти похожие ветки 

 
Doom_2 ©   (2007-04-30 19:39) [0]

Уважаемые мастера, возникла необходимость организовать передачу файлов с помощью TClientSocket и TServerSocket.
Вот статья, которой я воспользовался:
http://www.hostmake.ru/articles/delphi/384/
Что не понятно:
Есть разница - кто подключается первым? Для данного примера (если просто заменить
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
на
procedure TForm1.ServerSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
- возможно добиться передачи файла от пользователя к серверу?

Короче ситуация такая: я знаю IP-адрес получателя файла (Port, как понял, можно выбрать практически любой), т.е. по вышеописанному примеру - он должен быть клиентом (принимать файл), но тогда он-же и должен быть инициатором соединения... Проверить негде, поэтому мне необходим совет (чисто теоретически) - как мне переделать вышеуказанную статью под свои нужды.

Буду благодарен за любую полезную информацию!


 
Doom_2 ©   (2007-04-30 19:45) [1]

Т.е. мне важны два вопроса:
1. Соедениние - как оно инициируется?
2. Передача файлов - она в Socket-ах двухсторонняя?


 
medved_68 ©   (2007-04-30 20:42) [2]


> 1. Соедениние - как оно инициируется?

ClientSocket.Connect, ClientSocket.Open.

> 2. Передача файлов - она в Socket-ах двухсторонняя?

Да, но только при активированном соединении


 
Doom_2 ©   (2007-04-30 20:53) [3]

Я почему спрашиваю - вот очередной кусок кода с Delphi World:
procedure TForm1.FormCreate(Sender: TObject);
begin
 // Открытие ОТПРАВЛЯЮЩЕГО (SENDING) сокета.
 ServerSocket1.Active:= true;
end;

Получается: по-скольку я знаю ip только принимающего компьютера, значит я его должен сделать сервером. Но с сервера мы отправляем (по крайней мере, я не нашёл примера демонстрирующего обратное), а мне надо принять!

Как быть?


 
redlord   (2007-04-30 21:07) [4]

в твоем случае не важно кто сервер а кто клиент
но сервер на то и сервер чтоб обслуживать подключившихсяя клиентов.
а в какую сторону пойдут донные должно волновать тока программиста.
а чтоб клиент начл передачу то код отправки файла поставь в событие клиента onconnect


 
Doom_2 ©   (2007-05-01 09:03) [5]

Прошу прощения за надоедливость ;-)
1. Отправить сообщение по нажатию на кнопку можно так:
- от клиента: ClientSocket1.SendText("send");
- от сервера: ServerSocket1.SendText("send");
Принять так: (куда поместить эти строки???)
- от клиента: ClientSocket1.ReceiveText;
- от сервера: ServerSocket1.ReceiveText;
2. Передача файлов: (нуждаюсь в нескольких подсказках!)
- от сервера --> серверу

var  s, sl: string;
begin
 s:= Socket.ReceiveText; //- Это для чего?
 if not Reciving then
 begin
   SetLength(sl, StrLen(PChar(s))+1);
   StrLCopy(@sl[1], PChar(s), Length(sl)-1);
   DataSize:= StrToInt(sl);
   Data:= TMemoryStream.Create;
   Delete(s, 1, Length(sl));
   Reciving:= true;
 end;
 try
   Data.write(s[1], length(s));
   if Data.Size = DataSize then
   begin
     Data.Position:= 0;
     Image2.Picture.Bitmap.LoadFromStream(Data);
     Data.Free;
     Reciving:= false;
     Socket.Close;
   end;
 except
   Data.Free;
 end;
end;
===========================================
var ms: TMemoryStream;
begin
 if Socket.ReceiveText = "send" then
 begin
   ms:= TMemoryStream.Create;
   try
     Image1.Picture.Bitmap.SaveToStream(ms);
     ms.Position:= 0;
     Socket.SendText(IntToStr(ms.Size) + #0);
     Socket.SendStream(ms);
   except
     ms.Free;
   end;
 end;
end;

А от клиента к серверу как отправить??? В какие процедуры прописывать?


 
Doom_2 ©   (2007-05-01 09:04) [6]

"2. Передача файлов: (нуждаюсь в нескольких подсказках!)
- от клиента --> серверу"


 
medved_68 ©   (2007-05-02 10:16) [7]


> "2. Передача файлов: (нуждаюсь в нескольких подсказках!)
> - от клиента --> серверу"

ClientSocket.Socket.Send.....(Text,Buffer) на твое усмотрение :)



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

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.324 c
5-1154004530
Couter Terranist
2006-07-27 16:48
2007.05.20
халявний gif-анимационный компонент


2-1178097367
Washington
2007-05-02 13:16
2007.05.20
Базы данных Access - удаление записей


1-1173476847
VeLeS
2007-03-10 00:47
2007.05.20
Как сделать плавающее окно?


15-1176673777
Andy BitOff
2007-04-16 01:49
2007.05.20
Ядерная война.


2-1178266462
SerMaxx
2007-05-04 12:14
2007.05.20
Как работать с графиками