Fórum JPEG - enviar por socket #186684
07/10/2003
0
Tudo bem.
Estou desenvolvendo um programa para Lan-House (Delphi6) e gostaria de saber como eu faço para enviar uma imagem (arquivo) para outro micro através de socket.
O arq.jpg fica no micro cliente, então eu quero enviar esse arquivo pro servidor.
OBS: Nunca fiz isso, por isso gostaria que me ajuda-se pois não sei por onde começar.
Desde Já agradeço. :D
O ponto fraco do espírito esportivo é que só o conhecemos na derrota.
____________________
Anderson F. Belém
anderson@topsoft.inf.br
ICQ: 236068016
Anderson Belém
Curtir tópico
+ 0Posts
07/10/2003
_nekinho_
Nelson Lima - jnelson3@ig.com.br
NecTek - Pensando sempre diferente. =´
Gostei + 0
07/10/2003
Anderson Belém
Valeu cara!!! Inclusive eu recebi a primeira parte no meu e-mail. O seu nome é João Nelson?
Outra coisa vc sabe uma maneira rápida de reseolver esse probleminha?
Gostei + 0
07/10/2003
_nekinho_
Procedure TFormMIDAS.EnviaArq(NomeArq:ShortString; Conex:Integer);
Var ARQ : TFileStream;
Cabecalho : Parq;
Begin
New(Cabecalho);
Arq := TFileStream.Create(NomeArq,fmOpenRead);
Cabecalho^.Tamanho:=Arq.Size;
Cabecalho^.Nome := ExtractFileName(NomeArq);
if Conex >= 0 then // se for conexao maior q 0 então é servidor
Begin
SServidor.Socket.Connections[Conex].SendBuf(Cabecalho^,sizeof(Cabecalho^));
SServidor.Socket.Connections[Conex].SendStream(Arq);
end
else // Senão é cliente
Begin
MIDASCliente.Socket.SendBuf(Cabecalho^,sizeof(Cabecalho^));
MIDASCliente.Socket.SendStream(Arq);
end;
Freemem(Cabecalho);
end;
Ela é generica tanto pra Cliente quanto pra servidor observe no codigo a sutil difera! e Cabecalho é uma variavel do tipo TYPE neste formato:
Type PArq = ^Arq;
Arq = Packed Record
Tamanho : LongInt;
Nome : ShortString;
end;
e pra receber no evento onRead
Var
PBuffer : Pointer;
ArqHeader : PArq;
Recebido : integer;
begin
if RecebendoArq then // primeiro recebe o cabeçalho e cria o arquivo
Begin
GaugeArq.Progress:=0;
New(ArqHeader);
Socket.ReceiveBuf(ArqHeader^,SizeOf(ArqHeader^));
if ArqHeader^.Tamanho > 0 then
Begin
TamanhoArq := ArqHeader^.Tamanho;
GaugeArq.MaxValue := TamanhoArq;
Arquivo := TFileStream.Create(´C:\´+ArqHeader^.Nome,fmcreate);
Freemem(ArqHeader);
RecebendoArq:=false;
end;
end
else // Já to recebendo o arquivo ´RecebendoArq´ ......
Begin
GetMem(PBuffer,c_buffer); //Guardo o tamanho Ponteiro e o tamanho recebido;
Recebido := Socket.ReceiveBuf(PBuffer^,c_Buffer);
Arquivo.Write(PBuffer^,Recebido);
GaugeArq.Progress:=Arquivo.Size;
if Arquivo.Size = TamanhoArq then
Begin
Arquivo.Free;
RecebendoArq := True;
GaugeArq.Progress:=0;
end;
end;
end;
Já da pra entender? peguei um exemplo pronto observe q tem gauge pra mostrar o progresso e tudo. Falow Cara boa sorte qualquer coisa me manda um e-mail falow? jnelson3@ig.com.br
Gostei + 0
07/10/2003
Anderson Belém
Valeu Brother. Vou testar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)