webrodex 0 Denunciar post Postado Novembro 4, 2006 Estou com 1 probleminha queria saber como resolver isso ja ta me enchendo o saco ! Estou usando o componente Socket eu nao tou conseguindo enviar a mensagem que a o cliente deixou programado quando o download terminar no servidor e aparecer a mensagem que o usuario digitou abaixo ta o comando que estou disponibilizando para vocês me ajuda Comando do Cliente unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp;type TForm1 = class(TForm) ClientSocket1: TClientSocket; Button2: TButton; OpenDialog1: TOpenDialog; nome_arquivo: TLabel; textbox: TEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1; ArqTmp : TMemoryStream;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginArqTmp := TMemoryStream.Create;end;procedure TForm1.Button2Click(Sender: TObject);Var Tamanho : Int64;beginif OpenDialog1.Execute thenBeginArqTmp.Clear;ArqTmp.LoadFromFile(OpenDialog1.FileName);Tamanho := ArqTmp.Size;nome_arquivo.caption := 'Nome do arquivo: ' + extractfilename(opendialog1.filename);ClientSocket1.Socket.SendBuf(Tamanho,SizeOf(Int64));ClientSocket1.Socket.SendBuf(ArqTmp.Memory^,ArqTmp.Size); ClientSocket1.Socket.SendText(textbox.Text);end;end;procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);beginshowmessage ('Servidor desconectado');end;end. Comando do servidor unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, ComCtrls, StdCtrls;type TForm1 = class(TForm) ServerSocket1: TServerSocket; ProgressBar1: TProgressBar; SaveDialog1: TSaveDialog; nome_arquivo: TLabel; procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end;var Form1: TForm1; TamanhoArquivo : Int64; Arquivo : TMemoryStream; RecebendoArquivo : Boolean;implementation{$R *.dfm}procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);Var TamBuffer : integer;Paux : pointer;beginif not RecebendoArquivo thenBeginSocket.ReceiveBuf(TamanhoArquivo,sizeof(Int64));RecebendoArquivo := True;if Arquivo = nil thenArquivo := TMemoryStream.Create;ProgressBar1.Max := TamanhoArquivo;endelseBeginTamBuffer := Socket.ReceiveLength;GetMem(PAux,TamBuffer);Socket.ReceiveBuf(PAux^,TamBuffer);Arquivo.Write(PAux^,TamBuffer);Dispose(PAux);ProgressBar1.Position := Arquivo.Size;if TamanhoArquivo = Arquivo.Size thenBeginRecebendoArquivo := False;ShowMessage ('Transferencia completa');// aki deve tar o erro nao aparece a mensagem do textbox quando o cliente digita a mensagem //ShowMessage(Socket.ReceiveText);If SaveDialog1.Execute thenArquivo.SaveToFile(SaveDialog1.FileName);Arquivo.Free;Arquivo := Nil;ProgressBar1.Position := ProgressBar1.Min;end;end;end;end. Atenção aonde dexei // e aonde acho que ta ocorrendo o erro eu nao consigo de jeito nenhum fazer a mensagem do cliente enviar para o servidor inclusive eu ja fiz sozinho os comando de mensagem e cliente funcionou direitinho tinha colocado assim no cliente Socket.SendText(textbox.Text); e no servidor assim ShowMessage(Socket.ReceiveText); mas eu tentei implantar com esse meu projeto e nao ta dando certo ! alguem me ajuda ai porfavor obrigado ! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 6, 2006 Fiz algumas alterações no seu programa, veja se serve para você: CLIENTE unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp;type TForm1 = class(TForm) ClientSocket1: TClientSocket; Button2: TButton; OpenDialog1: TOpenDialog; nome_arquivo: TLabel; textbox: TEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end;var Form1: TForm1; ArqTmp : TMemoryStream;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginArqTmp:=TMemoryStream.Create;end;procedure TForm1.Button2Click(Sender: TObject);beginClientSocket1.Socket.SendText('POSSO_ENVIAR_ARQUIVO');end;procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);beginshowmessage ('Servidor desconectado');end;procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);var Tamanho: Int64; texto: string;begintexto:=Socket.ReceiveText;if texto = 'PODE_ENVIAR_ARQUIVO' then begin if OpenDialog1.Execute then Begin ArqTmp.Clear; ArqTmp.LoadFromFile(OpenDialog1.FileName); Tamanho:=ArqTmp.Size; nome_arquivo.caption:='Nome do arquivo: ' + ExtractFileName(OpenDialog1.FileName); Socket.SendBuf(Tamanho,SizeOf(Int64)); Socket.SendBuf(ArqTmp.Memory^,ArqTmp.Size); end; end;if texto = 'ARQUIVO_OK' then Socket.SendText(textbox.Text); end;end. SERVIDOR unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, ComCtrls, StdCtrls;type TForm1 = class(TForm) ServerSocket1: TServerSocket; ProgressBar1: TProgressBar; SaveDialog1: TSaveDialog; nome_arquivo: TLabel; procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; TamanhoArquivo : Int64; Arquivo : TMemoryStream; preparadoReceberArquivo, RecebendoArquivo : Boolean;implementation{$R *.dfm}procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);Var TamBuffer : integer; Paux : pointer; texto: string;beginif not preparadoReceberArquivo then begin texto:=Socket.ReceiveText; if texto = 'POSSO_ENVIAR_ARQUIVO' then begin preparadoReceberArquivo:=True; Socket.SendText('PODE_ENVIAR_ARQUIVO'); end else ShowMessage(texto); endelse begin if not RecebendoArquivo then begin Socket.ReceiveBuf(TamanhoArquivo,sizeof(Int64)); RecebendoArquivo:=True; if Arquivo = nil then Arquivo:=TMemoryStream.Create; ProgressBar1.Max:=TamanhoArquivo; end else Begin TamBuffer:=Socket.ReceiveLength; GetMem(PAux,TamBuffer); Socket.ReceiveBuf(PAux^,TamBuffer); Arquivo.Write(PAux^,TamBuffer); Dispose(PAux); ProgressBar1.Position:=Arquivo.Size; if TamanhoArquivo = Arquivo.Size then Begin RecebendoArquivo:=False; preparadoReceberArquivo:=False; ShowMessage('Transferencia completada'); If SaveDialog1.Execute then begin Arquivo.SaveToFile(SaveDialog1.FileName); Socket.SendText('ARQUIVO_OK'); end; Arquivo.Free; Arquivo:=nil; ProgressBar1.Position:=ProgressBar1.Min; end; end; end;end;procedure TForm1.FormCreate(Sender: TObject);beginpreparadoReceberArquivo:=False;end;end. No caso apenas criei a mais tipo um comunicação entre eles, no caso solicita se pode enviar um arquivo, caso o servidor permita, o envio é executado, depois dando um retorno para o cliente do arquivo OK, e por fim envio da mensagem... E ainda adicionei algumas propriedades a mais na parte do cliente... Compartilhar este post Link para o post Compartilhar em outros sites