Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

webrodex

Alguem sabe oque ta acontecendo com isso?

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.