Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c