Главная страница
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.308 c
2-1177567320
Gloomer
2007-04-26 10:02
2007.05.20
SQL-запрос на удаление


1-1174494493
VitAngel
2007-03-21 19:28
2007.05.20
Выделение строки в DBGrid


15-1176990214
divisi
2007-04-19 17:43
2007.05.20
Розроботка Игор


3-1172661461
Литейщик
2007-02-28 14:17
2007.05.20
Получение значений по умолчанию из БД MSSQL 2000


15-1177382155
Slider007
2007-04-24 06:35
2007.05.20
С днем рождения ! 24 апреля