Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
met4ka
8 / 8 / 0
Регистрация: 13.07.2012
Сообщений: 109
1

Отправка фото на удаленный компьютер

12.06.2013, 15:37. Просмотров 620. Ответов 3
Метки нет (Все метки)

Доброе время суток, Подскажите, пожалуйста, какими компонентом и как воспользоваться, чтоб отправить по сети простую фотку. Читал про сокеты, там что говорилось что можно с помощью файлового потока. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 15:37
Ответы с готовыми решениями:

Как зайти на удаленный компьютер (сервер) из программы на Делфи
Господа, подскажите пжл как зайти из программы на Делфи, которая запускается на...

Отправка данных с планшета на удаленный компьютер. оптимизация производительности планшета
Всем здравствуйте. В общем, задача такая. Имеется приложение для планшета,...

SMTP. отправка на удаленный домен
Здравствуйте. Я использую Windows Server 2003 на одной машине и Windows XP...

Отправка фото на почту по 2G
Добрый день, форумчане. Столкнулся с необходимостью сделать один прибор...

VK.API - Отправка фото
Доброго времени суток! Столкнулся с проблемой при отправке картинки в CURL...

3
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
12.06.2013, 20:27 2
Цитата Сообщение от met4ka Посмотреть сообщение
Читал про сокеты, там что говорилось что можно с помощью файлового потока
Видать недочитал.
Дочитывай.
0
саша40
-46 / 291 / 47
Регистрация: 14.08.2012
Сообщений: 2,565
13.06.2013, 11:07 3
Цитата Сообщение от mss Посмотреть сообщение
Видать недочитал.
Дочитывай.

Не по теме:

хорош! :D


Автор читай! Вот пример кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//размер файла
function TForm1.GetFileSize(FileName: String): Integer;
Var
 InfoFile : TSearchRec;
 AttrFile : Integer;
 ErrorReturn : Integer;
 Begin
 AttrFile := $0000003F;
 ErrorReturn := FindFirst(filename,AttrFile,InfoFile);
 if ErrorReturn <> 0 Then Result := -1
 else Result := InfoFile.Size;
 FindClose(InfoFile);
end;
 
//отправка картинки(файла) 
var
buffer: array [1..1024] of byte;
LenFile: integer;
i: integer;
y1,y2: integer;
f: file;
begin
ClientSocket1.Address:='***';//ip того кому посылаем
ClientSocket1.Post:=1001;
ClientSocket1.Connect;
if ClientSocket1.Connections[0]=false then 
begin
ShowMessage('Сервак временно недоступен');
exit;
end;
if OpenDialog1.Execute=false then exit;
GetFileSize(OpenDialog1.FileName);
y1:=FileLen div 1024; //кол-во покетиков размером с 1024 байта
y2:=FileLen mod 1024; //оставшийся байты
ClientSocket1.Socket.SendText('Принимай: ' + OpenDialog1.FileName + ';' + inttostr(y1) + ';' + inttostr(y2) + ';'); //посылаем название, кол-во пакетов 1024 байта и остаток
AssignFile(f,OpenDialog1.FileName);
Reset(f); //чтение
if y1>0 then begin 
for i:=1 To y1 Do 
begin
BlockRead(f,Buffer,1024);
ClientSocket1.Socket.SendBuffer(@Buffer,sizeof(Buffer));
end;
end;
if y2>0 then begin 
BlockRead(f,Buffer,y2);
ClientSocket1.Socket.ReceiveBuffer(@Buffer,sizeof(Buffer));
end;
CloseFile(f);
ShowMessage('Посылка доставлена');
ClientSocket1.Disconnect; //расоедениемся
end;
 
//теперь самое трудное-прием
//onCreate у формы
ServerSocket1.Port:=1001;
ServerSocket1.Active:=true;
 
//onRead у сервака
var
text: string; 
Buffer: array [1..1024] of Byte;
y1, y2: integer;
FileName: String;
i,i1: integer;
f: file;
begin
if text='' then 
begin
text:=Socket.ReceiveText;
end;
i:=pos(';',text);
FileName:=copy(Text,10,i-10);
i1:=posex(';',text,i); 
y1:=strtoint(copy(Text,i,i1-i));
i:=i1;
i:=posex(';',Text,i1);
y2:=strtoint(copy(Text,i,i1-i));
AssignFile(f, ExtractFilePath(Application.ExeName) + '\' + ExtractFileName(FileName));
Rewrite(f);
if y1>0 then 
begin
for i:=1 To y1 Do 
begin
Buffer:=Socket.ReceiveBuffer;
BlockWrite(f,@Buffer);
end;
y1:=0;
end;
if y2>0 then 
begin
Buffer:=Socket.ReceiveBuffer;
BlockWrite(f,@Buffer);
end;
CloseFile(f);
ShowMessage('Файл принят');
end;
Добавлено через 12 часов 35 минут
Цитата Сообщение от саша40 Посмотреть сообщение

Не по теме:

хорош! :D


Автор читай! Вот пример кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//размер файла
function TForm1.GetFileSize(FileName: String): Integer;
Var
 InfoFile : TSearchRec;
 AttrFile : Integer;
 ErrorReturn : Integer;
 Begin
 AttrFile := $0000003F;
 ErrorReturn := FindFirst(filename,AttrFile,InfoFile);
 if ErrorReturn <> 0 Then Result := -1
 else Result := InfoFile.Size;
 FindClose(InfoFile);
end;
 
//отправка картинки(файла) 
var
buffer: array [1..1024] of byte;
LenFile: integer;
i: integer;
y1,y2: integer;
f: file;
begin
ClientSocket1.Address:='***';//ip того кому посылаем
ClientSocket1.Post:=1001;
ClientSocket1.Connect;
if ClientSocket1.Connections[0]=false then 
begin
ShowMessage('Сервак временно недоступен');
exit;
end;
if OpenDialog1.Execute=false then exit;
GetFileSize(OpenDialog1.FileName);
y1:=FileLen div 1024; //кол-во покетиков размером с 1024 байта
y2:=FileLen mod 1024; //оставшийся байты
ClientSocket1.Socket.SendText('Принимай: ' + OpenDialog1.FileName + ';' + inttostr(y1) + ';' + inttostr(y2) + ';'); //посылаем название, кол-во пакетов 1024 байта и остаток
AssignFile(f,OpenDialog1.FileName);
Reset(f); //чтение
if y1>0 then begin 
for i:=1 To y1 Do 
begin
BlockRead(f,Buffer,1024);
ClientSocket1.Socket.SendBuffer(@Buffer,sizeof(Buffer));
end;
end;
if y2>0 then begin 
BlockRead(f,Buffer,y2);
ClientSocket1.Socket.ReceiveBuffer(@Buffer,sizeof(Buffer));
end;
CloseFile(f);
ShowMessage('Посылка доставлена');
ClientSocket1.Disconnect; //расоедениемся
end;
 
//теперь самое трудное-прием
//onCreate у формы
ServerSocket1.Port:=1001;
ServerSocket1.Active:=true;
 
//onRead у сервака
var
text: string; 
Buffer: array [1..1024] of Byte;
y1, y2: integer;
FileName: String;
i,i1: integer;
f: file;
begin
if text='' then 
begin
text:=Socket.ReceiveText;
end;
i:=pos(';',text);
FileName:=copy(Text,10,i-10);
i1:=posex(';',text,i); 
y1:=strtoint(copy(Text,i,i1-i));
i:=i1;
i:=posex(';',Text,i1);
y2:=strtoint(copy(Text,i,i1-i));
AssignFile(f, ExtractFilePath(Application.ExeName) + '\' + ExtractFileName(FileName));
Rewrite(f);
if y1>0 then 
begin
for i:=1 To y1 Do 
begin
Buffer:=Socket.ReceiveBuffer;
BlockWrite(f,@Buffer);
end;
y1:=0;
end;
if y2>0 then 
begin
Buffer:=Socket.ReceiveBuffer;
BlockWrite(f,@Buffer);
end;
CloseFile(f);
ShowMessage('Файл принят');
end;
Исправленый вариант:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var
//глобальные
 Text: String;
y1,y2: integer; 
FileName: String;
a: integer;
//отправка
var
buffer: array [1..1024] of byte;
LenFile: integer;
i: integer;
y1,y2: integer;
f: file;
begin
ClientSocket1.Address:='***';//ip того кому посылаем
ClientSocket1.Post:=1001;
ClientSocket1.Connect;
if ClientSocket1.Connections[0]=false then 
begin
ShowMessage('Сервак временно недоступен');
exit;
end;
if OpenDialog1.Execute=false then exit;
GetFileSize(OpenDialog1.FileName);
y1:=FileLen div 1024; //кол-во покетиков размером с 1024 байта
y2:=FileLen mod 1024; //оставшийся байты
ClientSocket1.Socket.SendText('Принимай: ' + OpenDialog1.FileName + ';' + inttostr(y1) + ';' + inttostr(y2) + ';'); //посылаем название, кол-во пакетов 1024 байта и остаток
AssignFile(f,OpenDialog1.FileName);
Reset(f); //чтение
if y1>0 then begin 
for i:=1 To y1 Do 
begin
BlockRead(f,Buffer,1024);
repeat
a:=ClientSocket1.Socket.SendBuffer(@Buffer,sizeof(Buffer));
until 
a=0
 
end;
 
end;
if y2>0 then begin 
BlockRead(f,Buffer,y2);
repeat
a:=ClientSocket1.Socket.ReceiveBuffer(@Buffer,sizeof(Buffer));
until 
a=0;
 
end;
CloseFile(f);
ShowMessage('Посылка доставлена');
ClientSocket1.Disconnect; //расоедениемся
end;
 
//onRead
var
F: file;
buffer: array [1..1024] of Byte;
i,i1: integer;
begin
if text='' then 
begin
Text:=Socket.ReceiveText;
i:=pos(';',text);
FileName:=copy(Text,10,i-10);
i1:=posex(';',text,i); 
y1:=strtoint(copy(Text,i,i1-i));
i:=i1;
i:=posex(';',Text,i1);
y2:=strtoint(copy(Text,i,i1-i));
exit; //она вызывится ещё при приеме буфера
end;
if y1>0 then 
begin
Assignfile(f,GetCurrentDir + '\' + FileName);
FileMode := fmOpenReadWrite;
Rewrite(f);
repeat 
a:=Socket.ReceiveBuffer(@Buffer,1024);
BlockWrite(f, Buffer,1024);
until 
a=0;
 
end;
СloseFile(f);
y1:=y1-1;
end;
if (y1=0) and (y2>0) then 
begin
Assignfile(f,GetCurrentDir + '\' + FileName);
FileMode := fmOpenReadWrite;
Rewrite(f);
repeat 
a:=Socket.ReceiveBuffer(@Buffer,y2);
BlockWrite(f, Buffer,y2);
until 
a=0;
 
end;
y2:=y2-1;
CloseFile(f);
end;
//приняли
end;
0
mss
13.06.2013, 13:54     Отправка фото на удаленный компьютер
  #4

Не по теме:

Цитата Сообщение от саша40 Посмотреть сообщение
Автор читай! Вот пример кода
Если в этом коде фигурирует штатный TClientSocket, то ты невменяем

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 13:54
Привет! Вот еще темы с ответами:

Можно ли выключить удаленный компьютер?
Можно ли вообще выключить удаленный компьютер по IP

Отправка фото в социальные сети
Хочу сделать программу что бы она делала скриншот и отправлять могла их в соц...

Отправка фото в инстаграм используя апи
Всем привет, пару лет назад, задавался таким вопросов, но ответ был один,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru