Главная страница
    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.47 MB
Время: 0.029 c
3-1172729445
NikNet
2007-03-01 09:10
2007.05.20
Авто - нумерация строк в Селекте, Возможно ли такое


1-1174561093
Димыч
2007-03-22 13:58
2007.05.20
ScrollBar в Treeview


2-1178197153
vitv
2007-05-03 16:59
2007.05.20
Запрос+null


3-1172416665
Mr. D.
2007-02-25 18:17
2007.05.20
Управление доступом к отдельным полям


9-1150337378
Mfox
2006-06-15 06:09
2007.05.20
Помогите скачать directx60.rar с DelphiGFX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский