Ir para conteúdo
Fórum Script Brasil
  • 0

Como Mandar Texto Via Serversocket Clientsocket? Dar Error


mariquito

Pergunta

ola fiz um serve e um cliente só que não to conseguindo enviar os textos para o cliente

SERVIDOR

unit serve;

interface

uses

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);

begin

valor:=edit1.Text;

showmessage(valor);

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

ServerSocket1.Socket.Connections[0].SendText(valor+'thiago');

end;

end.

CLIENTE

unit cliente;

interface

uses

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);

begin

nrorec:= Socket.ReceiveText;

edit1.Text:=nrorec;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

edit1.Text:=nrorec;

end;

end.

a onde estar o error?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0
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

poxa veio muito obrigado mesmo...está indo tudo certo veio..graças ao seu exemplo

agora sem que abusar mais já abusando...como eu tiro esse error do socket?

DENTRO DE UM TIMER

procedure 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 esse

codigo de error e não conseguir

try

ChatClientSocket.Active := not ChatClientSocket.Active;

except

end;

end;

você sabe como eu posso tirar essa mensagem de error?

Link para o comentário
Compartilhar em outros sites

  • 0
...

agora sem que abusar mais já abusando...como eu tiro esse error do socket?

DENTRO DE UM TIMER

procedure 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 esse

codigo de error e não conseguir

try

ChatClientSocket.Active := not ChatClientSocket.Active;

except

end;

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?

Link para o comentário
Compartilhar em outros sites

  • 0
...

agora sem que abusar mais já abusando...como eu tiro esse error do socket?

DENTRO DE UM TIMER

procedure 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 esse

codigo de error e não conseguir

try

ChatClientSocket.Active := not ChatClientSocket.Active;

except

end;

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á desligado

eu 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

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Desculpe 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 especificamente

você pode colocar nesse evento o Seguinte

ErrorCode := 0;

Se não me engano vai instruir ao componente a não dar nenhuma

mensagem de erro mas não tenho certeza, eu já passei por isso

uma vez, mas por tantos problemas eu fiz da seguinte forma, existe

dois tipos de transmissão, TCP e UDP

A diferença básica entre os dois é que TCP você precisa estar conectado

ao host para passar dados, e você consegue ficar sabendo se o Host

recebeu os dados por erros...

Já UDP você não fica conectado ao Host, você pode enviar os dados sem

problemas, 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 exemplo

O 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 problemas

com isso, é um sistema que roda em uma lan house faz uns 8 anos e nunca tive

problemas...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Opa

Desculpe 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 especificamente

você pode colocar nesse evento o Seguinte

ErrorCode := 0;

Se não me engano vai instruir ao componente a não dar nenhuma

mensagem de erro mas não tenho certeza, eu já passei por isso

uma vez, mas por tantos problemas eu fiz da seguinte forma, existe

dois tipos de transmissão, TCP e UDP

A diferença básica entre os dois é que TCP você precisa estar conectado

ao host para passar dados, e você consegue ficar sabendo se o Host

recebeu os dados por erros...

Já UDP você não fica conectado ao Host, você pode enviar os dados sem

problemas, 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 exemplo

O 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 problemas

com isso, é um sistema que roda em uma lan house faz uns 8 anos e nunca tive

problemas...

abraço

poxa..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..

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

poxa..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 do

Delphi, 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 rs

De qualquer forma você vai precisar saber o IP da máquina Servidor, não

há como mesmo, sabendo o IP é só colocar em RemoteHost o IP do servidor

fica igual como se fosse conectar local...

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...