mariquito Postado Fevereiro 28, 2007 Denunciar Share Postado Fevereiro 28, 2007 ola fiz um serve e um cliente só que não to conseguindo enviar os textos para o clienteSERVIDORunit serve;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls;type TForm1 = class(TForm) ServerSocket1: TServerSocket; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end;var Form1: TForm1; valor:string;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);beginvalor:=edit1.Text;showmessage(valor);end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);beginServerSocket1.Socket.Connections[0].SendText(valor+'thiago');end;end.CLIENTEunit cliente;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls;type TForm1 = class(TForm) ClientSocket1: TClientSocket; Edit1: TEdit; Button1: TButton; procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; nrorec:string;implementation{$R *.dfm}procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);beginnrorec:= Socket.ReceiveText;edit1.Text:=nrorec;end;procedure TForm1.Button1Click(Sender: TObject);beginedit1.Text:=nrorec;end;end.a onde estar o error? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 2, 2007 Denunciar Share Postado Março 2, 2007 mariquito, não dá para precisar onde estaria o erro porque não está claro aonde ele ocorre.Entretanto, observe que no Server o evento OnClientConnect ocorre apenas a cada client que se conecta a este servidor. A instrução que você utilizou (ServerSocket1.Socket.Connections[0].SendText(valor+'thiago')) irá sempre enviar a mensagem (valor+'thiago') para o 1º client que se conectou (Socket.Connections[0]), o que pode não ser o desejado se houver a possibilidade de mais que um cliente se conectar. Neste caso, seria mais correto você utilizar o parâmetro Socket o qual se refere ao client sendo conectado (Socket.SendText...).A lista de conexões pode ser utilizada para enviar uma mensagem a um determinado client num momento específico (click de um botão enviar, por ex.). Mas eu não saberia lhe dizer como saber quantas conexões estão presentes - não conheço uma propriedade tipo "ConnectionCount" ou similar que permita indexar a lista Connections. O que eu já fiz, em uma oportunidade é manter uma lista (até porque na época era conveniente mesmo) com o nome do client e sockt recebidos na conexão.Eu fiz um exemplo (form) contendo um Server e 2 Client's para tentar auxiliar na compreensão do que estou dizendo e, quem sabe, auxiliá-lo a resolver seu problema. (Download)Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mariquito Postado Março 3, 2007 Autor Denunciar Share Postado Março 3, 2007 mariquito, não dá para precisar onde estaria o erro porque não está claro aonde ele ocorre.Entretanto, observe que no Server o evento OnClientConnect ocorre apenas a cada client que se conecta a este servidor. A instrução que você utilizou (ServerSocket1.Socket.Connections[0].SendText(valor+'thiago')) irá sempre enviar a mensagem (valor+'thiago') para o 1º client que se conectou (Socket.Connections[0]), o que pode não ser o desejado se houver a possibilidade de mais que um cliente se conectar. Neste caso, seria mais correto você utilizar o parâmetro Socket o qual se refere ao client sendo conectado (Socket.SendText...).A lista de conexões pode ser utilizada para enviar uma mensagem a um determinado client num momento específico (click de um botão enviar, por ex.). Mas eu não saberia lhe dizer como saber quantas conexões estão presentes - não conheço uma propriedade tipo "ConnectionCount" ou similar que permita indexar a lista Connections. O que eu já fiz, em uma oportunidade é manter uma lista (até porque na época era conveniente mesmo) com o nome do client e sockt recebidos na conexão.Eu fiz um exemplo (form) contendo um Server e 2 Client's para tentar auxiliar na compreensão do que estou dizendo e, quem sabe, auxiliá-lo a resolver seu problema. (Download)Abraçospoxa veio muito obrigado mesmo...está indo tudo certo veio..graças ao seu exemploagora sem que abusar mais já abusando...como eu tiro esse error do socket?DENTRO DE UM TIMERprocedure TForm_Client_Main.Timer1Timer(Sender: TObject);ChatClientSocket.Active := True;end;ocorre um mesagem de error ao atualizar conexão com o serve..eu queria que esse error não mostrasse tipo já tentei essecodigo de error e não conseguirtryChatClientSocket.Active := not ChatClientSocket.Active;exceptend;end;você sabe como eu posso tirar essa mensagem de error? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 3, 2007 Denunciar Share Postado Março 3, 2007 ...agora sem que abusar mais já abusando...como eu tiro esse error do socket?DENTRO DE UM TIMERprocedure TForm_Client_Main.Timer1Timer(Sender: TObject);begin ChatClientSocket.Active := True;end;ocorre um mesagem de error ao atualizar conexão com o serve..eu queria que esse error não mostrasse tipo já tentei essecodigo de error e não conseguirtryChatClientSocket.Active := not ChatClientSocket.Active;exceptend;end;você sabe como eu posso tirar essa mensagem de error?Qual é a mensagem de erro? E porque você ativa a conexão em um timer? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mariquito Postado Março 3, 2007 Autor Denunciar Share Postado Março 3, 2007 ...agora sem que abusar mais já abusando...como eu tiro esse error do socket?DENTRO DE UM TIMERprocedure TForm_Client_Main.Timer1Timer(Sender: TObject);begin ChatClientSocket.Active := True;end;ocorre um mesagem de error ao atualizar conexão com o serve..eu queria que esse error não mostrasse tipo já tentei essecodigo de error e não conseguirtryChatClientSocket.Active := not ChatClientSocket.Active;exceptend;end;você sabe como eu posso tirar essa mensagem de error?Qual é a mensagem de erro? E porque você ativa a conexão em um timer?a mensagem de error é "Asynchronous socket error 10061" só que so dar esse error quando o serve está desligadoeu coloco esse timer para o cliente ficar sempre atualizando quando o serve ligar...entendeu?e eu não quero que apareça esse error de mensagem "Asynchronous socket error 10061" eu quero que não apareça nada só fique querendo conectar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 3, 2007 Denunciar Share Postado Março 3, 2007 OpaDesculpe se intrometer, mas você pode fazer o seguinte...Tem um evento do Socket que é onSocketError certo?Então nele você pode tratar os erros, mais especificamentevocê pode colocar nesse evento o SeguinteErrorCode := 0;Se não me engano vai instruir ao componente a não dar nenhumamensagem de erro mas não tenho certeza, eu já passei por issouma vez, mas por tantos problemas eu fiz da seguinte forma, existedois tipos de transmissão, TCP e UDPA diferença básica entre os dois é que TCP você precisa estar conectadoao host para passar dados, e você consegue ficar sabendo se o Hostrecebeu os dados por erros...Já UDP você não fica conectado ao Host, você pode enviar os dados semproblemas, sem erros, porém não consegue ficar sabendo se o Host recebeu,a não ser que você faça um Callback, mas por padrão você não fica sabendo...Callback seria uma resposta a mensagem exemploO Cliente envia o comando "Olá"O Servidor retorna "Recebi: Olá"Então pra sanar todos os problemas, eu fiz da seguinte forma, usei TCP e UDP,o TCP apenas pra saber que está conectado, e UDP pra passar os dados...UDP da mais trabalho ainda mais fazendo dessa forma, mas nunca tive problemascom isso, é um sistema que roda em uma lan house faz uns 8 anos e nunca tiveproblemas...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mariquito Postado Março 3, 2007 Autor Denunciar Share Postado Março 3, 2007 OpaDesculpe se intrometer, mas você pode fazer o seguinte...Tem um evento do Socket que é onSocketError certo?Então nele você pode tratar os erros, mais especificamentevocê pode colocar nesse evento o SeguinteErrorCode := 0;Se não me engano vai instruir ao componente a não dar nenhumamensagem de erro mas não tenho certeza, eu já passei por issouma vez, mas por tantos problemas eu fiz da seguinte forma, existedois tipos de transmissão, TCP e UDPA diferença básica entre os dois é que TCP você precisa estar conectadoao host para passar dados, e você consegue ficar sabendo se o Hostrecebeu os dados por erros...Já UDP você não fica conectado ao Host, você pode enviar os dados semproblemas, sem erros, porém não consegue ficar sabendo se o Host recebeu,a não ser que você faça um Callback, mas por padrão você não fica sabendo...Callback seria uma resposta a mensagem exemploO Cliente envia o comando "Olá"O Servidor retorna "Recebi: Olá"Então pra sanar todos os problemas, eu fiz da seguinte forma, usei TCP e UDP,o TCP apenas pra saber que está conectado, e UDP pra passar os dados...UDP da mais trabalho ainda mais fazendo dessa forma, mas nunca tive problemascom isso, é um sistema que roda em uma lan house faz uns 8 anos e nunca tiveproblemas...abraçopoxa..veio tu é foda veio...deu certinho...muito obrigado mesmo!!e cara eu gostei do que você me disse sobre TCP e UDP ???bem...e você saberia como eu conecto o servidor e um cliente via internet...sabe porque?é porque eu não tenho IP dinanmico(IP REAL, IP VALIDO ou como chamar)e eu uso socket para c comunidar com o cliente.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 3, 2007 Denunciar Share Postado Março 3, 2007 Opapoxa..veio tu é foda veio...deu certinho...muito obrigado mesmo!!e cara eu gostei do que você me disse sobre TCP e UDP ???hauahu foda é o Micheus eu apenas dei uma opinião...Se quiser saber um pouco de UDP, da uma olhada na pasta Demos doDelphi, em FastNet possui um exemplo completo, foi assim que aprendi...bem...e você saberia como eu conecto o servidor e um cliente via internet...sabe porque?é porque eu não tenho IP dinanmico(IP REAL, IP VALIDO ou como chamar)e eu uso socket para c comunidar com o cliente..Você tem IP dinâmico e não estático rsDe qualquer forma você vai precisar saber o IP da máquina Servidor, nãohá como mesmo, sabendo o IP é só colocar em RemoteHost o IP do servidorfica igual como se fosse conectar local...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
mariquito
ola fiz um serve e um cliente só que não to conseguindo enviar os textos para o cliente
SERVIDOR
CLIENTE
a onde estar o error?
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.