• RSS
  • Facebook
  • Twitter
  • Linkedin

Criando um Chat no DELPHI utilizando Sockets

CRIANDO UM SISTEMA DE CHAT NO DELPHI

Faculdade de Alagoas (FAL)
Thiago Nascimento Melo. 3º Período.

Este é um pequeno tutorial que mostra como criar um simples sistema de CHAT, utilizando o TClientSocket e o TServerSocket, exemplificando como funciona um sistema Cliente/Servidor.

OBS: Não vou explicar neste tutorial como se coloca componentes, como renomeia e outras coisas básicas de Delphi que o Prof. Luiz Olivio explicou na sala. Este tutorial ensina apenas como utilizar os componentes do Delphi para criar um sistema de Chat (Cliente/Servidor).

Introdução
Eu estava procurando no DELPHI algum exemplo de algum sistema que utilizasse a arquitetura cliente/servidor. O mais prático que encontrei para um melhor entendimento foi os exemplos de CHAT encontrados na pasta DEMO/Internet/Chat do Delphi. (Existe outra pasta chamada NETCHAT, mas não olhei direito o que era).

Nas pasta CHAT, contem um pequeno projeto de um CHAT, que é cliente e servidor ao mesmo tempo, que utiliza Winsocket e também existe 2 pastas dentro chamadas Client e Server. No conteúdo destas pastas existe um sistema de Chat Cliente/Servidor completo, porem estes utilizam outro componente chamado TcpClient e TcpServer o que eu ainda não estudei direito.

Quando eu testei os sistemas, reparei que o sistema mais simples (Winsocket) suporta apenas uma comunicação Ponto-a-Ponto, isto quer dizer, o servidor suporta apenas 1 conexão. Neste caso ficou difícil entender então resolvi pesquisar na internet e desenvolver outro Chat utilizando Winsocket.

1ª Etapa
Para começar o Chat vamos criar a sua interface, neste caso adicione no programa os seguintes componentes:

Inserindo:
TMemo => Coloque o nome como Quadro.
Tmemo => Com nome de Status.

TGroupBox => Coloque o nome como C_Comandos
TEdit => Coloque dentro do TGroupBox (C_Comandos) com o nome de C_Texto
TEdit => Com nome de Host.
TEdit => Com nome de Apelido.
TButton => Com nome de Conectar.

TButton => Com nome de Servir.
2 Tlabel => Com caption Servidor e Apelido.

Agora adicione os seguintes componentes.
TclientSocket => Com nome de S_Cliente.
TserverSocket => Com nome de S_Server.

(VEJA FIGURA AO LADO)

Agora renomeie o Form1 para ChatFal. (Clique no Form depois vá em name e mude).

Vamos tentar deixar o Object Treeview mais ou menos assim:

Pronto agora tente organizar desta forma:

2ª Etapa

Bom nesta etapa vamos começar a programar o chat.

a) O primeiro evento que o programa irá executar será o TchatFal.FormCreate, clique 2x no formulário, e deixe este procedimento assim:

    
procedure TChatFal.FormCreate(Sender: TObject); {Limpa o quadro}
    begin
        Quadro.Text := ”;
    end;

Explicação:

Com isto, assim que o formulário inicie, o conteúdo do componente QUADRO será apagado.

b) O segundo evento a ser programado será do componente C_Texto. Aqui vamos criar uma [i]procedure[/i] para o evento OnKeyDown (Este evento ocorre quando um texto for digitado na Tedit).

Primeiro se declara a procedure.

procedure C_TextoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

Depois vamos programar a procedure.

procedure TChatFal.C_TextoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin

        if Key = VK_Return then
            begin
                S_Cliente.Socket.SendText(C_Texto.Text + ‘::::’ + Apelido.Text);
                C_Texto.Text := ”;
            end;
    end;


Explicação:
Nos criamos uma procedure que utiliza uma variável “Key” do tipo Word, e declaramos também o uso do Shift (Se não declarar o uso do shift não funciona).

 if Key = VK_Return then => Se a tecla digitada for igual ao [ENTER] então execute.

S_Cliente.Socket.SendText(C_Texto.Text + ‘::::’ + Apelido.Text); => Envia o texto para o servidor no formato (Mensagem::::Apelido) este formato será explicado mais na frente.

 C_Texto.Text := ”; => Limpa o conteúdo da TEdit C_Texto.

c) Vamos programar a procedure do terceiro evento. Este será para o botão “Conectar” onde ao clicar o programa irá pegar o conteúdo da Tedit “Host” e tentar conectar-se.

Clique 2x em cima do botão Conecta, e deixe da seguinte forma:

procedure TChatFal.ConectarClick(Sender: TObject);
    begin
        if S_Cliente.Active then
            begin
                S_Cliente.Active := False;

                Conectar.Caption := ‘Conectar’;
            end
         else begin
                S_Cliente.Host := Host.Text;
                S_Cliente.Active := True;
        end;

    end;

Explicação:

if S_Cliente.Active then => Primeiro verificamos se o TclientSocket esta ativo (isto é se a conexão já esta ativa).

 S_Cliente.Active := False; => Se tiver ativo ele desativa (Desconecta).

Conectar.Caption := ‘Conectar’; => Altera o caption do TButton (Conectar) para ‘Conectar’.

 else begin => Caso a conexão já esteja desativada, isto é S_Cliente.Active = False então ele vai se conectar.

 S_Cliente.Host := Host.Text; => Pega o conteudo de Host isto é o endereço IP do servidor, e coloca na propriedade Host do componete S_Cliente.

S_Cliente.Active := True; => Ativa a conexão.

3ª Etapa

Agora vamo programar os eventos do conexão do Lado Cliente.

Primeiro declare os procedimentos abaixo:

procedure S_ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);

procedure S_ClienteDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure S_ClienteError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure S_ClienteRead(Sender: TObject; Socket: TcustomWinSocket);

Estes são os eventos do componente TclientSocket que colocamos no programas e renomamos para S_Cliente.

Agora vamo programa-los um por um.

Primeiro OnConnect.

procedure TChatFal.S_ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);
    begin
        Status.Lines.Add(‘Cliente ::> Conectado a: ‘ + S_Cliente.Host);
        Conectar.Caption := ‘Desconectar’;

        Apelido.Enabled := False;
        S_Cliente.Socket.SendText(‘NICK::::’ + Apelido.Text);
    end;

Explicação:
Este evento somente ocorre quando há sucesso de conexão, isto é logo após estabelecer conexão com o servidor sem erros.

 Status.Lines.Add(‘Cliente ::> Conectado a: ‘ + S_Cliente.Host); => Aqui escrevemos no status Status.Lines.Add uma mensagem informando o cliente que ele teve sucesso na conexão.

 Conectar.Caption := ‘Desconectar’; => Muda-se o caption do TButton (Conectar) de ‘conecta’r para ‘desconectar’, pois agora sua função será encerrar a conexão.

Apelido.Enabled := False; => Depois desabilitamos o Tedit do Apelido (Apenas para o cliente não mudar de apelido durante a conexão o que não afeta nada caso mude).

S_Cliente.Socket.SendText(‘NICK::::’ + Apelido.Text); => Enviamos para o servidor um Texto seguindo o mesmo formato que a procedure de escrever S_Cliente.Socket.SendText. Repare que desta vez o formato muda um pouco, antes era (Mensagem::::Apelido) agora é (NICK::::Apelido). Isto serve para diferenciar o tipo de mensagem, a primeira é uma mensagem normal, a segunda informa que você entrou no servidor.

O Tratamento desses formatos fica no lado do servidor que veremos em breve.

Segundo evento é o OnDisconnect.

procedure TChatFal.S_ClienteDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    begin
        Status.Lines.Add(‘Cliente ::> Desconectado ‘);

        Conectar.Caption := ‘Conectar’;
        Apelido.Enabled := True;
    end;

Explicação:

Este evento é o oposto do evento anterior, ele somente é executado quando a conexão é desfeita.

Status.Lines.Add(‘Cliente ::> Desconectado ‘); => Informamos ao cliente com uma mensagem no status Status.Lines.Add.

Conectar.Caption := ‘Conectar’; => Mudamos o caption do TButton (Conectar) para "conectar".

Apelido.Enabled := True; => Habilitamos a TEdit (Apelido).

Terceiro evento é o OnError.

procedure TChatFal.S_ClienteError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    begin
        Status.Lines.Add(‘Cliente ::> ERRO ao tentar conectar a: ‘ + S_Cliente.Host);

    end;

Explicação:

Bastante simples, em caso de erro de conexão informa no status a mensagem ERRO ao tentar conectar a: ‘ + S_Cliente.Host.

Quarto e ultimo evento da TclientSocket, OnRead.

procedure TChatFal.S_ClienteRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
        Quadro.Lines.Add(Socket.ReceiveText);
    end;

Explicação:
Este evento ocorre quando o TClientSocket recebe dados através da conexão ativa. Como a mensagem já vem formatada pelo servidor basta apenas adicionar no quadro  Quadro.Lines.Add(Socket.ReceiveText); .

Pronto aqui finalizamos a programação do lado Client do nosso chat.

EDITANDO AS PROPRIEDADES DO COMPONETE TClientSocket (S_Cliente).

Agora vamos parar um pouco a programação, e vamos alterar as propriedades do nosso componente TclientSocket. Onde aqui vamos configurar a porta de comunicação e também vamos colocar os eventos que programamos nos seus devidos lugares.

Primeiro selecione o ícone do componente TclientSocket (S_Cliente) no formulário, depois vá na janela do “Object Inspector” e em propriedades coloque Active em FALSE (Para iniciar desconectado) e em Port abaixo de Name coloque a seguinte porta (666) ou outra que você quiser e que não esteja sendo usada pelo sistema.

Agora vá na aba Eventos e configure os eventos como esta abaixo na IMG.

Pronto o lado cliente já esta pronto agora vamos programar o lado servidor do nosso chat.

4ª Etapa

Nesta etapa vamos primeiro programar o evento do TButton "Servir" (Eu coloquei a caption deste botão como (Iniciar Servidor).

Clique 2x no botão para programar o evento.

procedure TChatFal.ServirClick(Sender: TObject);
    begin
        if S_Server.Active = True then
            begin
                S_Server.Active := False;

                Status.Lines.Add(‘Servidor ::> Servidor Desligado!’);
                Servir.Caption := ‘Iniciar Servidor’;
                S_Cliente.Active := False;
                Host.Enabled := True;
                Conectar.Enabled := True;

            end
        else begin
                S_Server.Active := True;
                Servir.Caption := ‘Parar Servidor’;
                Host.Enabled := False;
                Conectar.Enabled := False;

                S_Cliente.Host := ‘127.0.0.1’;
                S_Cliente.Active := True;
            end;
    end;

Explicação:
Primeiro da mesma forma que o botão de conectar primeiro verificamos o estado do servidor. Se ele está servindo ou esta parado.

  if S_Server.Active = True then => Caso esteja ativo, isto é caso ele esteja esperando conexões na porta configurada, então vamos desligar.

S_Server.Active := False; => Desliga o servidor.

Status.Lines.Add(‘Servidor ::> Servidor Desligado!’); => Informa no status que o servidor foi desligado.

Servir.Caption := ‘Iniciar Servidor’; => Muda o caption do TButton (Servir) para ‘iniciar servidor’.

S_Cliente.Active := False; => Desativa a conexão do cliente. (Ao iniciar o servidor automaticamente o programa se conecta ao servidor).

 Host.Enabled := True; => Abilita o campo de escolha do IP.

Conectar.Enabled := True; => Abilita o botão de conectar.

else begin => Caso o servidor não esta ativo, então ative.

S_Server.Active := True; => Ativa o servidor, e neste momento o servidor fica esperando conexões na porta configurada.

Servir.Caption := ‘Parar Servidor’; => Muda o caption do TButton (Servir) para ‘parar servidor’ pois sua função agora é parar.

Host.Enabled := False; => Desativa o campo de escolha do IP (O cliente vai se conectar no localhost).

 Conectar.Enabled := False; => Desativa o botão de conectar, pare evitar desconexão do cliente com o servidor local.

 S_Cliente.Host := ‘127.0.0.1’; => Força o host do S_Cliente para localhost (127.0.0.1).

 S_Cliente.Active := True; => Conecta no servidor como cliente.

O IP ‘127.0.0.1’ Corresponde a própria maquina, neste caso ao ligar o servidor ele também se conecta como cliente e desabilita as opções de conexão, caso desligue o servidor ele também se desconecta.

Agora o passo seguinte e declarar os procedimentos dos eventos do S_Server.

procedure S_ServerListen(Sender: TObject; Socket: TCustomWinSocket);
procedure S_ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);

procedure S_ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure S_ServerClientRead(Sender: TObject; Socket: TcustomWinSocket);

Os eventos são parecidos com os eventos do S_Cliente com diferença que não usa o evento OnError e agora existe o evento OnListen.

Vamos aos eventos.

Primeiro o evento OnListen.

procedure TChatFal.S_ServerListen(Sender: TObject;
Socket: TCustomWinSocket);
    begin
        Status.Lines.Add(‘Servidor ::> Servidor Ligado!’);
    end;

Explicação:
Este evento ocorre quando o servidor é ligado, isto é quando ele começar a escutar na porta determinada. Quando isto ocorre ele simplesmente escreve no status a mensagem de que o servidor está ligado.
Status.Lines.Add(‘Servidor ::> Servidor Ligado!’);

Segundo evento será o OnClientConnect.

procedure TChatFal.S_ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
    begin
        Status.Lines.Add(‘Servidor ::> Usuário Conectado => ‘+ Socket.RemoteAddress);

     end;

Explicação:

Este evento ocorre quando o servidor recebe uma conexão de algum cliente. Quando isto ocorrer vamos escrever no status do servidor uma mensagem informando que um novo usuário se conectou e qual seu IP (Socket.RemoteAddress).

Status.Lines.Add(‘Servidor ::> Usuário Conectado => ‘+ Socket.RemoteAddress

Terceiro evento será o OnClientDisconnect.

procedure TChatFal.S_ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);

    begin
        Status.Lines.Add(‘Servidor ::> Usuário Desconectado => ‘+ Socket.RemoteAddress);
    end;

Explicação:
Este evento ocorre quando o servidor termina uma conexão de algum cliente. Quando isto ocorrer vamos escrever no status do servidor uma mensagem informando que o usuário se desconectou e qual seu IP (Socket.RemoteAddress).
Status.Lines.Add(‘Servidor ::> Usuário Desconectado => ‘+ Socket.RemoteAddress);

Quarto e mais importante evento OnClientRead.

procedure TChatFal.S_ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
    var texto: array[0..1] of string;
    temptexto: string;
    Index: integer;
    begin

        temptexto := Socket.ReceiveText;
        texto[0] := Copy(temptexto, 1,Pos(‘::::’, temptexto) -1);
        texto[1] := Copy(temptexto, Pos(‘::::’, temptexto) + Length(‘::::’),Length(temptexto));
        if texto[0] = ‘NICK’ then {Verifica se a mensagem eh de entrada}
            begin

                WITH S_Server.Socket DO BEGIN {Se a msg for de entrada avisa a todos os clientes quem entrou }
                    FOR Index := 0 TO ActiveConnections-1 DO BEGIN
                        Connections[Index].SendText(texto[1] + ‘ entrou na sala: ‘);
                    END;
                END;
            end

        else

            begin
                WITH S_Server.Socket DO BEGIN {Se nao for de entrada, então eh msg normal, no caso passa para todos a msg}
                    FOR Index := 0 TO ActiveConnections-1 DO BEGIN
                        Connections[Index].SendText(‘(‘ + texto[1] + ‘) escreveu: ‘ + texto[0]);
                    END;
                END;

                Status.Lines.Add(‘Servidor ::> ‘ + texto[1] + ‘ (‘ + Socket.RemoteAddress + ‘) escreveu: ‘+ texto[0]);
            end;

end;


Explicação

Este evento é o mais importante do chat, pois é nele que realmente o chat irá funcionar. O evento ocorre quando o servidor recebe dados do cliente, neste caso ele terá que receber a mensagem e repassar para todos os clientes conectados (Broadcasting).

Esta parte foi difícil desenvolver, pois no exemplo que vem no Delphi (WinSocket) ele não envia para todos os usuários a mensagem, ele apenas adiciona na Memo a informação recebida.

Depois de uma boa pesquisada no GOOGLE sobre WinSocket eu achei uma solução funcional.

Bom vamos passo a passo do código.

var texto: array[0..1] of string; => Este array será necessária para formatação dos dados.

 temptexto: string; => Está variável será necessária para formatação dos dados.

 Index: integer; => Variável de controle para o loop de broadcast.

temptexto := Socket.ReceiveText; => Variável temptexto recebe os dados enviados pelo cliente Socket.ReceiveText.

 texto[0] := Copy(temptexto, 1,Pos(‘::::’, temptexto) -1); => Separa a informação em duas partes, texto[0] pega tudo que estiver antes do separador ‘::::’ (Lembre-se do formato de envio). OBS: Procure no HELP do Delphi explicações sobre as funções Pos, Length e Copy. Pois são muito uteis.

texto[1] := Copy(temptexto, Pos(‘::::’, temptexto) + Length(‘::::’),Length(temptexto)); => Aqui texto[1] pega tudo que estiver depois do separador ‘::::’.

if texto[0] = ‘NICK’ then => Se o que estiver antes de ‘::::’ for NICK então foi mensagem de entrada.

 WITH S_Server.Socket DO BEGIN => Bom aqui eu estou dizendo que com o Objeto S_Server.Socket Faça. No help do Delphi tem uma explicação sobre ‘WITH’.

 FOR Index := 0 TO ActiveConnections-1 DO BEGIN=> Um laço usando FOR, até o final das conexões. (ActiveConnections vem do objeto S_Server através do WITH).

Connections[Index].SendText(texto[1] + ‘ entrou na sala: ‘); => Vai enviando mensagens para todas as conexões da primeira até a ultima, informando quem entrou no servidor.

Else => Se não for ‘NICK’ o que vem antes do separador ‘::::’, então deve ser mensagem.

WITH S_Server.Socket DO BEGIN => Denovo WITH.

FOR Index := 0 TO ActiveConnections-1 DO BEGIN => Laço de 0 até o final das conexões.

Connections[Index].SendText(‘(‘ + texto[1] + ‘) escreveu: ‘ + texto[0]); => Envia para todas as conexões a mensagem enviada.

Status.Lines.Add(‘Servidor ::> ‘ + texto[1] + ‘ (‘ + Socket.RemoteAddress + ‘) escreveu: ‘+ texto[0]); => Adiciona no status do servidor uma cópia da mensagem.

Pronto agora terminamos de programar os eventos do componente S_Server. Agora vamos editar suas propriedades no Object Inspector da mesma forma que configuramos o S_Client.

Deixamos Active = False
e Port = 666 (Ou a porta que você usou no S_Client).

e os eventos (Events)

OnClientConnect = S_ServerClientConnect
OnClientDisconnect = S_ServerClientDisconnect
OnClientRead = S_ServerClientRead
OnListen = S_ServerListen

O resto dos eventos ficam em branco como na imagem abaixo:

TESTANDO O CHAT

Pronto salve tudo e compile, agora vá na pasta em que o programa foi compilado e abra 3 janelas do programa.

No primeiro coloque o apelido como Administrador e clique em iniciar o Servidor.
No segundo coloque como usuario1 digite o endereço local (127.0.0.1) e clique em conectar.
No Terceiro coloque como usuario2 digite o endereço local (127.0.0.1) e clique em conectar.

Pronto agora teste a comunicação entre os 3.

Bom espero que tenha funcionado seu CHAT, você pode baixar o código fonte completo do chat e a versão binária do mesmo neste link abaixo:

http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/c_h_a_t_f_a_l.zip

(O nome do arquivo esta separado por _ para evitar de ser bloqueado pelo Proxy da rede da FAL.)

Links de referência usados:
http://www.guiadodelphi.com.br
http://www.delphi-forum.de

Este tutorial pode ser reproduzido e publicado livremente, desde que se mantenha os créditos do autor.
12 de Março de 2005.
Thiago Melo
(thiago@dolphinconsult.com.br).

165 Responses so far.

  1. Dener says:

    MSIE 7.0 Windows XP

    Ola gostaria se tem como implementar isso p/ ser usado na web ou so funciona local?
    grato

  2. Thiago Melo says:

    Firefox 2.0.0.6 Windows XP

    Sim da para implementar para web, já que é uma conexão TCP/IP, basta apenas conectar no seu IP real da internet.

    Caso esteja usando internet compartilhada, firewall, e etc tem que configurar estes equipamentos ou programas antes.

    • Guihgo says:

      Chrome 18.0.1017.2 Windows XP

      E aew Thiago Melo !

      Como ja visto você já respondeu o Dener de como implementar na Web !

      queria que você explicasse com mais detalhes :

      ” basta apenas conectar no seu IP real da internet.”

      e se for possivel como pode passar outros links com explicação !

      Pois eu não acho de jeito algum !

      Muito obrigado…

    • Guihgo says:

      Chrome 18.0.1025.162 Windows 7

      valeu aew!
      Mas será quevocÂe poderia mandar o prjeto ?

      guihgo@hotmail.com

  3. Marcos says:

    MSIE 6.0 Windows XP

    Amigo Thiago, não li o o artigo todo mas fica fácil implementar o Chat onde eu consiga conversar com um usuário por vez assim como o MSN?

  4. Thiago Melo says:

    Firefox 2.0.0.6 Windows XP

    O chat é bastante amador, mas nele da pra conversar com uma ou várias pessoas ao mesmo tempo, ele só não tem um bom controle de quem esta conectado, mas funciona.

    basta rodar o chat em 2 maquinas diferentes rodar o server em uma e conectar com a outra (lembre-se de configurar seu firewall)

  5. jobim says:

    MSIE 7.0 Windows XP

    Thiago Melo, fiz tudo certo aqui, mas deu um erro!!

    “asynchronous socket error 10049”

    SE VC PUDESSE AJUDAR…

    DEIS DE JA AGRADECIDO

  6. Thiago Melo says:

    Firefox 2.0.0.7 Windows XP

    Isso acontece quando o programa tenta escutar um IP:PORTA e o mesmo já está sendo utilizado.

    Segundo o manual da M$ do winsock

    WSAEADDRNOTAVAIL
    10049

    Cannot assign requested address.

    The requested address is not valid in its context. This normally results from an attempt to bind to an address that is not valid for the local computer. This can also result from connect, sendto, WSAConnect, WSAJoinLeaf, or WSASendTo when the remote address or port is not valid for a remote computer (for example, address or port 0).

  7. Gabriel says:

    Firefox 2.0.0.8 Windows XP

    Cara… show seu artigo… adorei
    estava querendo fazer um simples joguinho em rede…
    seu artigo me deu um bom começo de como fazer
    vlw… PARABÉNS

  8. Jhony says:

    MSIE 7.0 Windows XP

    Ohh tiago me dá uma força…
    toda hr dá esse erro e naum tem como fazer mais nada:

    Could not find source location to add methot C_TextoChange.”END” or INITIALIZATION not found in unit souce.

    desde já agradeço

  9. Thiago Melo says:

    Firefox 2.0.0.9 Windows XP

    @Gabriel, valeu velho boa sorte no jogo.

    @Jhony esse erro deu com o source do chat? estranho isso me confirma ai, que eu estou meio esquecido de Delphi, faz anos que não programo em Delphi.

  10. marcos says:

    MSIE 7.0 Windows XP

    ae thiago, vc tem msn para conversarmos? eu queria saber como posso colorir os nicks?

  11. Francisco says:

    MSIE 6.0 Windows XP

    Parabéns Thiago

    Artigo muito bom…

  12. João says:

    MSIE 6.0 Windows XP

    Show de bola

  13. Reinaldo Reis says:

    MSIE 7.0 Windows Vista

    cara muito show… o que eu aprendi, foi sem valor! muito obrigado. valeu mesmo!!!!!!!!!!!!

  14. Alex Sandro says:

    MSIE 6.0 Windows XP

    Ola é possivel colocar este Chat no meu site. se for como.

  15. Thiago Melo says:

    Firefox 2.0.0.13 Windows XP

    Pra site é mais complicado converter, programação WEB e bem mais fácil que essa aí, existem muitos chats prontos e de graça na web basta procurar.

  16. Gabriela Nunes says:

    MSIE 6.0 Windows XP

    Olá, gostei muito do artigo, porém, ao tentar testar o programa, houve o seguinte erro, já citado anteriormente: “Ashynchrous spcket error 10049”, e não sei como arrumá-lo…se pudesse me ajudar, ficaria muito feliz, obrigada pela atenção!!

  17. Thiago Melo says:

    Firefox 2.0.0.13 Windows XP

    “Ashynchrous spcket error 10049” Olá Gabriela, eu já comentei sobre esse erro aqui, tipo ele da quando a porta e o ip já estão utilizados.

    Pode ser o programa travou a porta, não sei se o código fonte do chat esta no arquivo que eu botei o link mas qualquer coisa eu mando para voce.

    Faz tempo que nao mexo com delphi, então nao me lembro de muita coisa.

  18. André says:

    MSIE 7.0 Windows XP

    olá… parabéns pelo chat..
    mas é o seguinte:
    aqui ta dando um erro Ashynchrous socket error 10061, oq será q é isto?
    vlw

  19. André says:

    MSIE 7.0 Windows XP

    ops…
    desculpa, entendi o porque q dava este erro
    só faltava alguem estar como servidor… rsrsrs
    mas vlw, parabéns pelo chat..
    flw

  20. André says:

    MSIE 7.0 Windows XP

    como posso fazer para que este chat possa ter a função de enviar arquivos, assim o servidor pode mandar um arquivo p/ o cliente, e visse e versa?

  21. Thiago Melo says:

    Firefox 2.0.0.14 Windows XP

    @Andre, cara eu ainda não estudei essa parte de envio de arquivos em Delphi eu tava vendo isso em C++, porem eu apanhei muito pra fazer o chat e acabei colocando de lado um pouco.
    Reinventar a roda é bom para aprender mas se for pra algo sério e bom da uma olhada em algo pronto, algum plugin e etc.

  22. Eric says:

    Unknown Windows XP

    Thiago, muito interativo seu post!
    é possível interagir com um chat na web “que ja esteje rodando”?
    a partir de um cliente socket, tipo passando dados/recebendo e montando o chat dentro do delphi?
    abraços!

  23. Luciano says:

    Firefox 2.0.0.14 Windows XP

    Thiago,

    Muito bom o tópico. Eu gostaria de saber se acaso o lado client da aplicação sair abruptamente o que acontece? Será avisado? Caso não tem com ser feito uma rotina para exibir quem se desconectou abruptamente inclusive com número da conexão. Pelos testes que fiz aqui, qdo um cliente se disconecta de maneira normal é avisado ao server.

  24. Thiago Melo says:

    Firefox 2.0.0.14 Windows XP

    De maneira brusca ele não avisa mesmo, quando eu fiz esse chat não cheguei a ir a fundo no protocolo, coisas como enviar mensagem privada, ou arquivo não seriam possíveis ate que eu soubesse como controlar os clientes no servidor.
    A partir do momento que eu consiga controlar as conexões com algum tipo de identificação no servidor eu posso avisar quando alguem sai de meneira brusca.

  25. Thiago Melo says:

    Firefox 2.0.0.14 Windows XP

    @Eric, eu creio que seja possivel sim, porem eu acho que é mais facil e pratico fazer um somente com os recursos da web, como PHP e AJAX, eu tenho um rodando no meu forum como uma shoutbox, sem refresh.
    http://killermonkeys.net (ver o bloco da esquerda)

  26. anonimo says:

    Firefox 2.0.0.14 Windows XP

    filé do brasil
    muito bom cara continue assim

  27. Rock2099 says:

    Firefox 3.0 Windows XP

    Muito boa dica de chat, e forum bem interativo, nota 11.

  28. LUANA PADILHA says:

    MSIE 6.0 Windows XP

    THIAGO eu estou no inicio de aprendizagem de delphi só que tenho que apresentar um trabalho pra feira tecnica e gostei mto do seu chat
    Antes de iniciar o desenvolvimento gostaria de saber sua opiniao se é mto complicado pra uma pessoa iniciante como eu!!??

    sera q consigo??

    ah e }Parabéns..!!

  29. Thiago Melo says:

    Firefox 3.0 Windows XP

    @Luana,
    Delphi em si é fácil, eu hoje não sei mais nada de Delphi depois que paguei a materia meio que apaguei da mente, mas quando fiz o chat eu não sabia NADA de delphi, eu sabia pascal um pouco, foi lendo na internet e aprendendo.
    O chat é bem simples de fazer e entender e o código fácil de se explicar no caso de apresentar.

  30. LUANA PADILHA says:

    MSIE 6.0 Windows XP

    Hum eu consegui fazer só q ta dando um um erro Ashynchrous socket error 10061!! o que pode ser isso??

  31. LUANA PADILHA says:

    MSIE 6.0 Windows XP

    thiago tem diferença nesse memo o ultimo que esta como status pro memo de cima que é o quadro??

  32. David says:

    MSIE 6.0 Windows XP

    Parabéns Thiago!Show seu artigo!
    Encontrei um pequeno problema e quem sabe vc pode dar uma força. Tenho 3 placas de rede instaladas no meu computador e o servidor monitora o ip da placa que não é a que possui conexão com a internet. Vc sabe como eu poderia escolher a interface a ser usada, no caso a que possui conectividade com a internet?

    Abraço

  33. Thiago Melo says:

    Firefox 3.0 Windows XP

    @LUANA, nossa nem vi que tinha novo comentário.
    O Ashynchrous socket error 10061 é por que ele não encontrou o servidor, logo acima tem alguem com o mesmo problema e resolveu ligando o server. E não os Tmemo são iguais eu so colori mais o outro.

    @DAVID, não sei como que ele escolhe a Ethernet, achei que ele ficasse escutando no 0/0 (toda a rede) veja se a interface da internet não esta com um firewall, ou você pode colocar o IP da placa que você deseja no S_Server.Host que ele vai dar bind nessa placa exclusivamente.

  34. Gustavo Martins says:

    MSIE 7.0 Windows XP

    Não sei se o assunto já morreu, mas gostaria de dar a minha contribuição. Sobre o Erro: “Ashynchrous socket error 10061” Falha de conecção com Servidor, resolvi da seguinte maneira:

    No evento OnError do TClientSocket setar o parametro manipulador de erro ErrorCode:= 0; p/ anular a visualização da messagem de erro e evitar a iniciação do ESocketError.

    No evento OnErro tb traz dois parametros p/ identificar a natureza do erro, e assim poder trata-las adequadamente, são elas:

    var ErroCode do tipo Integer
    e
    ErrorEvent do tipo TErrorEvent

    [Capturar Número do Erro] Declarar uma variável do tipo Integer p/ capturar o número do erro:

    num_erro:= ErroCode; // captura o número do erro
    ErroCode:= 0; // Anula manipulador de erro
    Memo1.Lines.Add(‘Erro: ‘ + IntToStr(num_erro)); //visualiza o número do erro em TMemo

    [Natureza do Erro]

    Verificado o que provocou o erro, capturando resultado do parametro ErrorEvent: TErrorEvent;

    // soquete eeGeneral recebeu uma mensagem de erro que não se encaixa em qualquer uma das seguintes categorias
    if ErrorEvent = eeGeneral then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeDisconnect’);

    //eeSend Ocorreu um erro ao tentar escrever para o soquete de conexão
    if ErrorEvent = eeSend then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeSend’);

    //eeReceive Ocorreu um erro ao tentar ler a partir da conexão socket
    if ErrorEvent = eeReceive then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeReceive’);

    //Uma ligação eeConnect pedido que foi já aceito não pôde ser concluída
    if ErrorEvent = eeConnect then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeConnect’);

    //eeDisconnect Ocorreu um erro ao tentar fechar uma conexão
    if ErrorEvent = eeDisconnect then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeDisconnect’);

    //eeAccept Um problema ocorreu durante a tentativa de aceitar solicitação de uma conexão cliente.
    if ErrorEvent = eeAccept then memo1.Lines.Add(‘Erro número: ‘ + IntToStr(num_erro) + ‘ eeAccept’);

    Espero ter a ajudado.

    Abraços a todos

    Gustavo Martins

  35. Firefox 3.0.1 Windows XP

    Eu estaria interessado em ter uma ajuda para um jogo de cartas, estilo super trunfo.

    o básico do jogo tem como principio básico um chat parecido com o seu.

    é uma estrutura cliente/servidor

    depois que 4 pessoas entrarem no chat, todas apertarem um botão com status pronto (SIM, NÃO) e o jogo inicia quando todos tem status SIM.

    o servidor embaralha as cartas, distribui todas as cartas.. então o primeiro jogador escolhe um dos atributos, que é comparado com todos os outros jogadores e o maior leva todas as cartas que são colocadas no fim do baralho.

    o jogo termina quando o vencedor obter todas as cartas.

    quero sua opinião sobre isso, pois vou precisar de ajuda. e nao sei aonde procurar materiais para mim ter uma base.

    até mesmo o codigo fonte de um chat simples como o seu ajudaria muito.

    o link está quebrado.

    se puder me ajudar, escreve pra hiro@mundoavatar.com.br

  36. Thiago Melo says:

    Firefox 3.0.1 Windows XP

    Olá Lucas, sobre o seu projeto com relação a Delphi eu não sei se posso te ajudar pois faz anos luz que não mexo com Delphi, mas o link do chat eu arrumei estava com um domínio antigo e agora já está ok.

  37. Firefox 3.0.1 Windows XP

    nao consigo baixar.
    🙁

    ja removi todos os underlines
    mas ainda dá como pagina nao encontrada.

  38. claudionor says:

    MSIE 7.0 Windows XP

    Cara, preciso apresentar um trabalho na faculdade, onde tenho que criar um chat criptografado. Tem como me dar essa dica.

    Valeu mesmo.

  39. Thiago Melo says:

    Firefox 3.0.1 Windows XP

    Claudionor, cara nunca tive experiência com isso, mas procura ler sobre OpenSSl.

  40. Junior says:

    MSIE 7.0 Windows XP

    Onde posso achar esse componente Tclientsocket

  41. Thiago Melo says:

    Firefox 3.0.3 Windows XP

    Rapaz veio no Delphi que usei acho que Delphi 7

  42. Diógenes says:

    Firefox 3.0.3 Windows XP

    @Junior

    dei uma estudada, tenho um projeto de chat pra fazer e achei esse interessante, ainda to aprendendo

    a TClientSocket e TServerSocket pelo que lí, vem na versão do Delphi 6, no 7 não tem

    porém se vc procurar no diretório do delphi 7 tem um arquivo binário que instala esses 2 componentes

    só n lembro o nome dele, da uma pesquisada no google, q na versão do 7 tem como add eles sim

  43. Danilo says:

    Firefox 2.0.0.17 Windows XP

    Ola,pessoal quando eu teclo enter a menssagem nao é enviada,alguem poderia me ajuda?

  44. Thiago Melo says:

    Firefox 3.0.3 Windows XP

    @Danilo, da uma olhada no evento do enter. Não lembro qual é

  45. Francisco César says:

    MSIE 7.0 Windows XP

    Ao ver esse chat tive a idéia de incorporá-lo num joguinho da forca via rede que estou desenvolvendo. O problema é que não tenho experiência em sockets. Se alguém quiser me ajudar com isso, estou disponibilizando o jogo no link http://www.franciscocesar.com/jogo.forca.v1.zip. O chat do Thiago funciona sem problemas, mas a aplicação da forca só funciona de
    maneira isolada em cada micro; isso é óbvio pq ainda não implementei nada por falta
    de experiência, como já disse. Um abraço a todos, especialmente ao Thiago pelo compartilhamento de seu programa.

  46. Francisco César says:

    MSIE 7.0 Windows XP

    Esqueci um detalhe…Imagino que o jogo que postei acima poderia funcionar da seguinte forma: Como a interação entre os 2 jogadores não se dá o tempo todo, ou seja, hora joga um, hora jogo outro; em outras palavras, enqto 1 joga (tenta adivinhar a palavra), o outro assiste até acabar o jogo, diferente de uma disputa em tempo real, por exemplo, o que seria mto mais complicado em termos de socket. Então pensei que deve existir algum recurso tipo, o que aparecer aqui (micro 1), mostre lá no outro (micro 2), algo assim. Espero ter sido claro. Abraços…chico

  47. Thiago Melo says:

    Firefox 3.0.3.NETCLR3.5.30729 Windows XP

    @Francisco a ideia e boa, eu mesmo queria tentar botar mais controle no chat, porem meu conhecimento em sockets de delphi era bem limitados, hoje é nulo hahaah lembro de nada. Boa sorte ai.

  48. Francisco César says:

    MSIE 7.0 Windows XP

    Valeu Thiago. Acertei diversos bugs que tinha o anterior jogo; caso queira, acesse http://www.franciscocesar.com/Project1.exe
    Assim que conseguir o funcionamento pela rede, deixo aqui pra quem quiser brincar. Abraço.

  49. Mustang says:

    Firefox 3.0.3 Windows XP

    Aê,show de bola o chat

    Eu tava querendo aprender fazer um chat pra conectar na uol…olha como exemplo os chat clients do alteradoserevoltados.com

    Tem como vc me dá alguma dica?

    Desde já,agradeço

  50. Mustang says:

    Firefox 3.0.3 Windows XP

    Eu tinha esquecido..Não quero atrapalhar o chat da Uol.

    Tenho a simples ideia de criar um bot q responde perguntas..tipo um joguinho de perguntas e respostas…

    Vlw

  51. Diógenes says:

    Firefox 3.0.4 Windows XP

    Pô, eu fiz várias modificações nesse chat, tais como skins e funções a mais..porém agora preciso criar, tipo um evento para que quando alguém receber alguma mensagem, tipo acontecesse igual msn, pro cara ver que recebeu uma mensagem e tal..caso alguém queira ver como minhas modificações estão, mail me dgs_alves@live.com!

    agradeço qualquer ajuda desde já!

  52. ERROR says:

    MSIE 7.0 Windows Vista

    Deu erro Aki Meu Velho

  53. Thiago Melo says:

    Firefox 3.0.5 Windows XP

    Se você ler os comentários acima vai ver que outras pessoas conseguiram, e outras tiveram problemas, basta pesquisar um pouco no google para resolver o problema na compilação no seu PC. Cada PC é diferente, versões, drivers, compiladores e etc, claro que o código pode da erro dependendo da versão do Delphi que você usa.

  54. Firefox 3.0.5 Windows XP

    Teria como eu bloquear um certo cliente sem desconectalo do chat, tipo eu levanto o server de chat e derepente entram 3 clientes, mas um desses clientes está fora das regras do chat, então eu quero bloquealo. Tem como?

  55. Thiago Melo says:

    Firefox 3.0.5 Windows XP

    Creio que sim porem como eu não implementei e não mostrei ai como controlar as conexões, você vai ter que dar uma fuçada na documentação do componente de socket pra ver como controlar as conexões pelo server.

  56. henrique says:

    Firefox 3.0.5 Windows XP

    horrivel faz uma video aula melho que isso mano

    • Thiago Melo says:

      Firefox 3.0.5 Windows XP

      “Vídeo Aula?”, onde você está vendo vídeo aula? Se você não entendeu como se faz melhor estudar delphi um pouco mais “mano” antes de tentar algo.

  57. Leonardo says:

    MSIE 6.0 Windows XP

    Olé thiago, belo tutorial, simples e rápido, mas é o seguinte eu tenho o delphi 7, só que ele não tem o Botão Tlabel, na aba Internet, o que eu posso fazer?

  58. Leonardo says:

    MSIE 6.0 Windows XP

    Olá*

  59. Vyttor Salgado says:

    Chrome 1.0.154.36 Windows XP

    Então gente, esse erro que apareceu para um monte gente ai de:

    “asynchronous socket error 10049”

    tanto pode ser a porta que por acaso pode estar em uso como tambem, vcs estarem abrindo o Chat antes que o server….

    Precisamente deve ser aberto o server antes do nosso programa de chat…..

    Gostei do forum gente…. vlw ai… isso ai… apoio mutuo…

  60. Ricardo says:

    Firefox 3.0.6 Windows XP

    Bem Thiago meu problema é o seguinte estou montando uma aplicação que será limitada para 2 usuarios somente por servidor … então criei um codigo de recepção em cada mensagem que direciona ela para os campos corretos no programa agora eu não consigo por exemplo mandar a mensagem para apenas um dos participantes …
    EX: Participante1 enviou: 1[1,2]**[9.0]3%%Bom dia ;
    Eu gostaria que a mensagem chegasse somente no Participante2 … teria como me ajudar ? sou experiente em delphi mais esse é um problema que eu não consegui resolver ainda =X

    espero respostas =)

  61. Ricardo says:

    Firefox 3.0.6 Windows XP

    Estou fazendo assim …
    Declarei essa variavel global :
    conexao :tlist;

    Montei essa função :
    function direcionar(cliente: pointer):integer;
    begin
    result := conexao.IndexOf(cliente);
    End;

    Estou usando-a assim :

    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
    Socket: TCustomWinSocket);
    Var Msg : String;
    IDCli : integer;
    begin
    IDCli := LocalizaCliente(Socket.Data);
    Msg := socket.ReceiveText;

    If IDCli = 1 then
    Serversocket1.Socket.Connections[2].SendText(msg)
    else
    Serversocket1.Socket.Connections[1].SendText(msg);
    end;

    percebe algum erro? dessa maneira ele não esta enviando pra nem um nem outro =S

    …. aguardo respostas

  62. Ricardo says:

    Firefox 3.0.6 Windows XP

    desculpe o post acima pq eu desenvolvo duas aplicaçoes ao mesmo tempo então acabei me confundindo …

    Estou fazendo assim …
    Declarei essa variavel global :
    conexao :tlist;

    Montei essa função :
    function direcionar(cliente: pointer):integer;
    begin
    result := conexao.IndexOf(cliente);
    End;

    Estou usando-a assim :

    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
    Socket: TCustomWinSocket);
    Var Msg : String;
    idcliente : integer;
    begin
    idcliente := direcionar(Socket.Data);
    Msg := socket.ReceiveText;

    If IDCli = 1 then
    Serversocket1.Socket.Connections[2].SendText(msg)
    else
    Serversocket1.Socket.Connections[1].SendText(msg);
    end;

    percebe algum erro? dessa maneira ele não esta enviando pra nem um nem outro =S

    …. aguardo respostas

  63. Thiago Melo says:

    Firefox 3.0.6 Windows XP

    @Leonardo, acho que usei Delhpi 6 não lembro, mas acho que Tlabel e so uma label pode se usar qualquer outra coisa.

    @Vyttor Salgado, sim eu também creio que seja isso.

    @Ricardo, eu citei lá em cima, eu não sou muito bom em Delphi, apenas curioso, gosto muito de TCP/IP, o lance do chat foi apenas ver como funciona, mas a parte de controle, eu procurei bastante por algum material na internet e não achei, acabei deixando só no básico mesmo.
    Quando eu falo controle, falo em controlar o protocolo, a conexão, fazer com que eu possa avisar o servidor se fulando entrou ou saiu da sala, ou enviar uma mensagem privada, fazendo com que o servidor só envie para 1 pessoa.
    Para fazer isso tem que aprender a controlar e identificar as conexões de forma que quando um client mandar o pacote com a informação por exemplo MENSAGEM PRIVADA para CLIENTE Y, ele envie para o socket de client Y.
    No meu código ele não identifica de quem é o socket ele apenas faz um loop com todas as conexões e envia os dados.

  64. Vyttor Salgado says:

    Chrome 1.0.154.36 Windows XP

    Ricardo >>>> Seguinte você tem várias maneiras de fazer isso, mais a que eu aconselho por ser mais simples e fácil seria você criar um identificador na msg que vc envia…. e depois o servidor dispara a msg para todos os cliente, só que você no cliente você configura para ele ouvir somente as msg que estiverem endereçadas a ele… entendeu você cria um identificador de quem ta enviando e para quem é a msg quando for para todo vc simplesmente configura o cliente para aceitar o dele como tambem o de todos…… Depois eu posto um código básico aqui de como você vai fazer isso ok?

  65. Vyttor Salgado says:

    Chrome 1.0.154.36 Windows XP

    Se alguêm tiver duvidas pode perguntar aqui… vou passar a apoiar esse fórum aqui gente… eu gosto muito de programação….

    Isso claro que com a permissão do nosso Amigo Thiago, a própósito muito boa sua lógica ai nesse Tut que você fez…. Meus parabéns…

    Muito bem elaborado mesmo….

  66. Vyttor Salgado says:

    Chrome 1.0.154.36 Windows XP

    Thiago em qual periodo você esta mesmo????

    Me adiciona no msn estou querendo contatos de programadores…. para nos auto ajudar em caso de duvidas….

    Msn: vyttorsalgado@hotmail.com

    Precisando eu estou completamente a dispor….

  67. Thiago Melo says:

    Firefox 3.0.6 Windows XP

    Opa vytor pode ajudar o povo aqui a vontade, realmente esse artigo meu é muito visitado pela a falta de conteúdo nesse assunto (tcp/ip) na internet. Na época eu penei para achar algo.
    Eu não uso msn, uso gtalk apenas thiago(@)oxente.org, até escrevi algo sobre msn VS gtalk segue o link.
    http://thiago.oxente.org/2007/04/20/google-talk-vs-live-messenger

  68. Vyttor Salgado says:

    Chrome 1.0.154.48 Windows XP

    Opa… Thiago, me passa ai outros forums legais ai… para trocar de informação….

    Eu gostaria algum forum legal sobre frames… Conhece algum?

    Vlw pela ajuda…

  69. Thiago Melo says:

    Firefox 3.0.6 Windows XP

    Cara de Delphi eu so conheço os que botei la na referencias do artigo, mas fora isso tem a unidev.com.br que é muito bom, porem voltado para jogos.

  70. Vyttor Salgado says:

    Chrome 1.0.154.36 Windows XP

    Não precisa ser de Delphi especificamente…. mais pode ser de C#, visual basic, Cobol, lisp, php, visual c++ enfim, sobre qualquer linguagem….. eu gosto de aprender…..

  71. lightning says:

    Firefox 3.0.6 Windows XP

    boas thiago
    eu gostei muito do seu posto, porem a testar os caracteres que aparecem na memo em vez de ser o texto aparecem so quadredos, mudei o tipo de letra e começaram a aparecer aqueles caracteres chineses…
    tens ideia do que isto possa ser ?
    obrigado e parabens pelo post

  72. lightning says:

    Firefox 3.0.6 Windows XP

    P.S.: é so o texto que é dinamico ou seja recebido por exemplo, apelidos…
    por exemplo texto_enviado+’ disse:’
    so o texto enviado e que aparece com caracteres estranhos, o que ja estava pre-defenifo/”estatico” definido mesmo no codigo aparece bem :S

  73. Thiago Melo says:

    Firefox 3.0.6 Windows XP

    @lighting, tenta primeiro voltar o tipo de letra para o padrão, se funcionar então o problema está ai, nesse caso você vai ter que da uma pesquisa na net sobre isso de trocar o tipo de letra pois eu confesso que estou por fora total 🙂 .

  74. Khayo says:

    Chrome 1.0.154.48 Windows XP

    Muito bom o tutorial, para falar a verdade eu vi este tutorial numa outra página e difícil de entender, e depois que fiz todo o tutorial encontrei a sua pagina… hehehe. Estou com problemas para roda-lo, mas pelos comentários não fui o único e pela explicação que você deu anteriormente o problema é na máquina (“asynchronous socket error 10049”),

  75. Thiago Melo says:

    Firefox 3.0.7 Windows XP

    Então cara esse problema 10049 e com relação a porta, veja se você está rodando o server antes de conectar, e também veja se a porta já esta sendo utilizada.

  76. Karina says:

    Firefox 3.0.8.NETCLR3.5.30729 Windows XP

    Thiago como conecto na rede, tenho um computador com Windows XP e outro com o Vista, eles estão em rede, mas não consigo enviar mensagens entre eles.
    A rede esta funcionando normal, o programa esta no Xp, então puxei um atalho para o Vista. Conecto o servidor no XP,e no Vista quando clico em conectar da um erro de soket…
    O que devo colocar no campo servidor do computador cliente(Vista)?

    Grata desde já, gostei muito da sua dica, mas vc pode resolver meu problema?

  77. Karina says:

    Firefox 3.0.8.NETCLR3.5.30729 Windows XP

    O erro quando tento conectar o cliente é:
    Erro 10061 de sincronia do socket…

    Aguardo respota… obrigada

  78. Thiago Melo says:

    Firefox 3.0.8 Windows XP

    @Karina, você tem que pegar os IP das duas maquinas antes, e na maquina cliente o Vista você deve colocar o ip do XP no campo servidor, para informar para ele onde você vai conectar.

    No caso o vista está conectando no XP
    VISTA -> XP, qualquer coisa me add no gtalk/gmail thiago(a)oxente.org

  79. Karina says:

    Firefox 3.0.8.NETCLR3.5.30729 Windows XP

    O Vista esta conectado ao XP (O XP é o servidor)… fiz o que vc mandou, fiz ate um programinha para pegar todos os Ip’s da rede para facilitar…
    Conecto o XP como sevidor e no Vista coloco o IP do XP que é (192.168.0.1) conecto e…
    Não conectou agora da o erro 10060…
    Obrigada mesmo assim, vou instalar o Gtalk para entrar em contato com vc.

    Obrigada 🙂
    Karina
    Juazeiro-Bahia

  80. roger says:

    Firefox 3.0.8 Windows XP

    Legal…

    Acho que seria bom colocar um pequeno controle de erros para caso alguém tente mandar uma mensagem “NICK” .. rsrssr

    vlw pelo exemplo 😀

  81. Thiago Melo says:

    Firefox 3.0.8 Windows XP

    Fico no aguardo Karina.
    @Roger, um controle melhor das conexões seria ótimo, mas tem que estudar mais a fundo os componentes coisa que eu não fiz hehehe.

  82. lightning says:

    Firefox 3.0.8 Windows Vista

    boas thiago
    desculpe a ausencia..
    ja tentei varias coisas e nao estou a conseguir, aparece sempre caracters chineses.
    será que é algum defeito dos sockets ?
    onde posso sacar novos sockets (cliente/server) para o delphi ?

    grato

  83. lightning says:

    Firefox 3.0.8 Windows Vista

    bem, e que tambem nao sao todas as letras, sao so algumas que aparecem com caracters chineses, outras aparecem bem ..

    bem, tu tens msn onde possamos falar , talvez te possa enviar o meu chat ou coisa assim para veres, ou tu poças enviar-me o teu para ver se o teu da bem ?

  84. Thiago Melo says:

    Firefox 3.0.8 Windows XP

    @lighting eu nao uso msn, so tenho gtalk/gmail me add ai, thiago(a)oxente.org

    com certeza e algo errado no seu delphi.

  85. wesley says:

    Opera 9.64 Windows XP

    thiago Seu post é muito bom mesmo…
    kra eu fiz esse chat do jeito serto e deu um erro quando tentei connectar o pc do meu pai nesse chat(Para testar) obs: o pc dele é na msm REEDE-LAN.

    Acima pessoas perguntarao sobre o mesmo erro, e vc dice que tem que comfiguar fireware, diga mais sobre isso, o que devemos comfigurar no fire ware. o meu chat coloquei a porta 9092 e tentei configuralo tbm com outros tipos de ip(exemplo: no-ip e hamachi) sempre ocorre o mesmo erro.

  86. Thiago Melo says:

    Firefox 3.0.10.NETCLR3.5.30729 Windows XP

    Nas configurações da conexão do windows, se você clicar com o botão direito no icone de conexão perto la do relogio, vai aparecer configurações de FIREWALL, desligue o firewall e tente novamente.

    OBS meu windows é XP, no Vista não faço ideia.

  87. Alex Eloy says:

    Firefox 3.0.10 Windows XP

    Caros…

    é o seguinte….

    como faço para resolver o seguinte problema:

    do jeito que estar ai… se no servidor eu
    colocar isso:

    por exemplo:

    S_Server.Socket.ActiveConections

    ele vai retornar a quantidade de clientes conectados à ele… mas…. se num dos clientes eu desconectar do servidor……. sem ser por meio do botão ‘Desconectar’ (por exemplo: desconectando o cabo de rede), o servidor vai ficar identificando que o socket desse cliente ainda está ativo….. como faço pra resolver esse problema…

    fico no aguardo….
    retornem a resposta para o meu email.:

    contato@alexeloy.com

    • Thiago Melo says:

      Firefox 3.0.10.NETCLR3.5.30729 Windows XP

      Isso eu não sei na época até procurei um meio de fazer isso, mas o maior problema e identificar e controlar as conexões, primeiro tem que saber como dominar cada conexão, identificar, e setar um controle do tipo ficar dando um ping na conexão, enviando um teste, para poder dar um timeout.

  88. Juliana says:

    MSIE 7.0 Windows XP

    Olá Thiago.
    Estou no 2º ano de ensino técnico, e como trabalho final preciso fazer um chat, conectando dois computadores.
    Após algumas procuras, achei seu site e me interessei.
    O problemas é que eu preciso utlizar o programa C#, junto com o MYSQL. Gostaria de saber se vc tem alguma informação sobre isso 😀

    Obrigada!

  89. Thiago Melo says:

    Firefox 3.0.10.NETCLR3.5.30729 Windows XP

    @Juliana eu fiz alguma coisa com C++ e Linux, já usei tambem o Visual C++ com SQLlite e apanhei pra caramba creio que com o MySQL seja mais facil.

    Não tenho muito conhecimento com C# e .NET, eu tinha baixado o visual studio mais novo aqui mas não tive tempo para testar, infelizmente meu conhecimento em C# é nulo, e não tenho nenhum conteudo.

    Mas para fazer um chat você deve primeiro esquecer o MySQL e aprender o basico de conexões usando C#, usar sockets e etc, abrir um socket e conectar nele usando C++ por exeplo é super facil. Manipular essa conexão é outra coisa que requer um bom estudo, o ruim e que conteudo sobre isso na internet é muito fraco, o povo se concentra d+ em Delphi e Java.

    Mas boa sorte no trabalho se tiver alguma duvida especifica pode entrar em contato, meu gtalk é thiago(arroba)oxente.org, não uso MSN.

  90. Juliana says:

    MSIE 7.0 Windows XP

    ah sim, obrigado do mesmo jeito Thiago! Falei com a minha professora e ela disse que teria que usar uma CLASSE com SERVIDOR/CLIENTE para assim adicionar o IP e haver a conexão. Você saberia algo sobre isso ? agradeço desde já!

  91. Thiago Melo says:

    Firefox 3.0.10.NETCLR3.5.30729 Windows XP

    Vish Juliana ai ta fora do meu conhecimento, mas eu achei um bom link ta em portugues de Portugal, mas e melhor que nada, da uma olhda
    http://wiki.portugal-a-programar.org/cs:chat_usando_sockets_e_threads

  92. Juliana says:

    MSIE 7.0 Windows XP

    Olá Tiago preciso fazer um chat Delphi usando porta serial, tem alguma dica agradeço desde já bjus

  93. Thiago Melo says:

    Firefox 3.0.10 Windows XP

    Juliana, não entendi usando porta serial, você vai ligar dois computadores pela aquela porta serial? Eu nunca tive experiencia com isso faço nem idéia, mas creio que se você abrir o dispositivo e enviar uma mensagem ela chega do outro lado, pois no Linux se você der um echo “mensagem” > /dev/dispositivoserial a mensagem é enviada.

  94. Juliana Munhoz says:

    Firefox 2.0.0.20 Windows XP

    Ah sim, obg pelo site Thiago.. está ajudando muito!

    abraços

  95. carlos says:

    MSIE 7.0 Windows XP

    Para instalar o socket no delphi 7 seguir:
    Component | Install Packages | Add …/bin/dclsockets70.bpl

  96. Adriano says:

    MSIE 7.0 Windows XP

    Galera eu estou criando um chat pessoal para usar entre os usuário de uma rede interna… qdo pesquisei achei esse post … é muito bom mesmo … no meu chat estou usando tlistview pra mostrar colunas com ip /nome maquina / status … tá muito legal mesmo … T+ Galera !!!

  97. Thiago Melo says:

    Firefox 3.0.11 Linux

    Interessante Adriano, fica ai mais uma dica para quem quiser aprofundar e controlar as conexões.

  98. matheus says:

    Firefox 3.0.11.NETCLR3.5.30729 Windows XP

    Que delphi e utilizado neste chat
    foi inserido no dia 16 agosto, 2006
    entao presumi que fosse o delphi 2005
    mas no delphi 2005 nao tem TclientSocket TserverSocket

  99. Rodrigo says:

    MSIE 7.0 Windows XP

    Muito bom

    me ajudou bastante

  100. Thiago Melo says:

    Firefox 3.0.11.NETCLR3.5.30729 Windows XP

    Matheus eu acho que foi Delphi6 ou Delphi7 não lembro pois eu usava ambos na epoca.

  101. ang says:

    Firefox 3.5.3 Windows XP

    Cara dau tudo certo mas quando eu envio uma mensagem vai pro servidor como [][][][] ( caixinhas)

    obs: uso delphi 2009 com os componentes instalados

  102. Thiago Melo says:

    Firefox 3.5.3 Linux

    ang, Eu creio que seja um problema de codificação, teve uma pessoa que reportou as fontes estarem saindo em chinês no lado do servidor, e estava usando delphi 2009 também. Só não sei como ela resolveu, pois esse treco ai eu fiz no delphi6 ou 7 não lembro, e faz muuuuito tempo.

  103. Caio says:

    MSIE 8.0 Windows XP

    Opa, parabéns pelo ótimo post!

    Tô desenvolvendo um chat meu a partir do seu e tô tentando colocar a opção do usuário poder mudar a cor do texto que digitar. Coloquei um FontDialog para modificar o que escrever no Edit de envio e ele muda tranquilo, mas o ServerSocket.SendText não armazena a cor, aparentemente, apenas o texto. Como eu poderia fazer?

  104. Thiago Melo says:

    Firefox 3.5.3 Windows 7

    voce poderia editar a parte que ele envia o pacote (Mensagem::::Apelido) e mudar para (Mensagem::::Apelido:::COR)

    Agora tem que pegar a string do codigo da cor.

  105. Alexsander says:

    Firefox 3.5.3 Windows XP

    Thigo quando tento executar o seu codigo em casa ele mostra um erro na parte do S_cliente e do S_Server, diz q nao foi declarado algo assim. como posso concertar? pq to querendo implementar seu codigo.
    vlws

  106. Alexsander says:

    Firefox 3.5.3 Windows XP

    axei o erro..é q nao ta aparecendo o S_Cliete e o S_Server aki..mas quando vou criar um, ja diz q ja esxite com o mesmo nome, nao entendo.

  107. Thiago says:

    Firefox 3.5.3 Windows XP

    Aew cara, grande tutorial…

    eu portei ele pro delphi 2010 aqui, dai rodo o app em duas maquinas diferentes…
    acontece q apenas o primeiro ip que se conecta ao servidor recebe as mensagens… sabe uq pode ser??

    vlw

  108. Thiago Melo says:

    Firefox 3.5.3 Linux

    pode ser o firewall.

  109. Luis Basilio says:

    MSIE 8.0 Windows XP

    Mto bom,ficou mto show
    mais ele só serve para falar por exemplo com os pcs q estao em rede não é? tem como eu conversar por exemplo com alguem q esta em outro lugar?
    vlw

  110. Thiago Melo says:

    Firefox 3.5.5 Linux

    serve para internet também, basta ter o IP das maquinas e firewall desligado (ou propriamente configurado).

  111. michael says:

    Firefox 3.5.5 Windows XP

    ei onde eu compro o
    TclientSocket
    TserverSocket

    ??

  112. Thiago Melo says:

    Firefox 3.5.6.NETCLR3.5.30729 Windows XP

    no Delphi que usei 6 ou 7 (não lembro) já vinha.

  113. Bruno N. says:

    MSIE 8.0 Windows XP

    Parabéns pelo artigo…
    Ajudando o amigo acima…Fiz o exemplo no Delphi 2007, para usar TclientSocket e o TserverSocket e necessário instalar o componente “dclsockets100.bpl” que esta na pasta “C:Arquivos de programasCodeGearRAD Studio5.0bin”. Abraço

  114. Mauricio says:

    Chrome 5.0.375.55 Windows XP

    Fala galera,

    Eu estava com a mesma dificuldade de alguns em encontrar o TClientSocket e TServerSocket no Delphi 2009/2010, então vai aqui uma dica de como conseguir:

    vá até o menu Component -> Install Pakages -> ADD e abra o arquivo dclsockets140.bpl (DELPHI 2010) e depois clique em OK. Pronto vc já poderá usar os componentes.

    []’s

  115. chocomilk says:

    Firefox 3.6.NETCLR3.5.30729 Windows XP

    tem como colocar sistema de banimento ??

  116. chocomilk says:

    Firefox 3.6.NETCLR3.5.30729 Windows XP

    tem como coloca BAN nesse chat ??

  117. Thiago Melo says:

    Firefox 3.6.3 Linux

    chocomilk, sim tem, ai vai depender da seu conhecimento e delphi.

  118. Junior says:

    Firefox 3.6.6 Windows 7

    Olá amigos, gostaria de saber como direcionar a msg p apeas um dos participantes do chat, alguem tem um exemplo feito?, n sou muito bom c sokets, qro aprender mais sobre! obrigado! msn: juniorcsa@hotmail.com

  119. Gunnar says:

    Firefox 3.6.7 Windows XP

    Olá pesoal, tenho uma duvida aqui!criei um chat perfeitamente fiz algumas melhoras e focou 10, poren queria conecta-lo ao meu site é possivel?
    tipo desde conectar a outro chat(Servidor) conecto ao meu chat assim varias pessoas poderão entrar na sala!
    abraçso e agradeco a todos que me ajudarem!!

  120. Thiago Melo says:

    Firefox 3.6.8 Windows 7

    Gunner da sim o lance e que seu client agora vai ser outra interface, PHP, Java e etc. Eu recomendo fazer chat na web usando Javascript + PHP apenas tanto para client como server.

  121. Gunnar says:

    Firefox 3.6.8 Windows XP

    tipo naum quero o chat no meu site mais um programa que será conctado a ele..se vc me ajudar posso colocar um anuncio seu no program.
    abraçoss

  122. Rafael Queiroz says:

    Firefox 3.6.10 Windows XP

    Tenho uma pergunta cara…É o seguinte, eu testei o seu programa na internet e funcionou legal, mas minha conexão é rotiada, sendo que eu não posso usar o meu PC como servidor neste caso. Existe algum jeito de fazer o servidor usar tanto o IP externo (no caso do meu modem) contando com o Gateway?

    • Thiago Melo says:

      Firefox 3.6.8 Linux

      Voce precisa ir no seu roteador/modem e configurar um redirecionamento de porta para o IP interno da sua maquina, do tipo que vai ficar assim

      Seu pc com servidor (Roteador) Seu pc na internet.

  123. Rafael Queiroz says:

    Firefox 3.6.11 Windows XP

    Acredito que meu modem não possa fazer isso, mas mesmo que faça, meu IP é dinamico (muda a qualquer momento) minha ideia era um programa no estilo o Hamachi (vc ja deve ter ouvido falar), ele faz uma rede virtual cujo IP é estatico. Eu preciso de algo assim mas que não seja o Hamachi por que la tem muita coisa que eu não preciso. Tem ideia de como eu posso fazer isso? agradeço desde ja.

  124. Thiago Melo says:

    Firefox 3.6.11 Windows 7

    Tipo o Hamachi e uma ferramenta de VPN, no seu caso voce pode usar um serviço do tipo o no-ip.com (http://www.no-ip.com/) onde você vai ter um nome associado a seu ip dinamico.

    Da uma olhada.

  125. Rafael Queiroz says:

    Firefox 3.6.12 Windows XP

    Sim eu consegui usar o No-Ip, mas eu faço parte de uma rede cujos pcs todos tem acesso a internet (fiz com vizinhos que moram aqui perto). Enfim, se algum PC se conectar a internet sem ter o No-Ip instalado e eu não estiver online no momento o IP vai mudar =/
    Por isso a necessidade de fazer um programa parecido com o Hamachi, a ideia era criar uma rede virtual mas sem as frescuras todas do Hamachi. Se tiver alguma ideia qualquer uma ja ta valendo e obrigado pelas respostas rapidas 🙂

  126. Thiago Melo says:

    Firefox 3.6.8 Linux

    Tipo não sei o seu caso, mas alguns roteadores adsl, inclusive eu tenho 2, já vem com suporte a serviços do tipo o no-ip, eu acho que ao Dyn-dns algo assim.

    Neste caso o roteador sempre vai atualizar o nome.

    Fazer algo no nível do Hamachi já esta alem do meu conhecimento hehehe. Mas para te indicar o caminho estude sobre VPN.

  127. Rafael Queiroz says:

    Firefox 3.6.12 Windows XP

    Hahaha ta certo Thiago vlw rapaz, seu eu conseguir qualquer resultado eu te do um toque

  128. LUkinhas says:

    Firefox 3.6.12 Windows XP

    esse chat funciona em duas maquinas diferentes?

  129. Mauricio says:

    MSIE 7.0 Windows XP

    EI CARA MUITO BOM SEU CHAT MAS EU TO PRECISANDO DE UNS BOTOES COM COMANDO DE RETIRAR USUARIOS CONECTADOS.
    PARA SO ENTRAR QUEM FOI COMVIDADO.
    ENTENDE?

  130. Thiago Melo says:

    Firefox 3.6.12 Linux

    Então Maurício para fazer isso você deve identificar as conexões para dropar as que você quer.

    Como fazer isso? Bom ai eu não sei mais, não uso delphi desde 2006

  131. ola th says:

    MSIE 8.0 Windows XP

    ola thiago estou com um problema usei o seu tutorial mais nao consigo mandar a mensagem so pra uma pessoa,se eu mandar pra um mando pra todos pcs na rede,existe um jeito te sei la mandar uma mensagem reservada.?obrigado dede ja.

  132. Ramon says:

    MSIE 8.0 Windows XP

    eu que mandei a mensagem do reservado ai por avor me ajude rs

  133. Ramon says:

    MSIE 8.0 Windows XP

    ola thiago estou com um problema,ao enviar uma mensagem eu mando pra todos tem como de mandar uma mensagem reservada so pra uma pessoa tipo msn?agradeço muito,desde ja.

  134. Thiago Melo says:

    Firefox 3.6.12 Linux

    Ramon, a intenção desse chat é demonstrar como funciona o envio de mensagem em uma sala, fazendo broadcast para todos que estão nela.

    Infelizmente eu não tive tempo (na época que fiz o chat) para incrementar o chat de forma que ele tivesse controle dos usuários, podendo enviar mensagens reservadas, chutando da sala, banindo e etc.

    Para ter este recurso você vai ter que modificar o chat.

  135. Rafael Queiroz says:

    Firefox 3.6.13 Windows XP

    Salve Thiago o
    cara eu tenho uma duvida, eu to tentando fazer um jogo de cartas. o famoso 21
    Queria saber se vc conhece algum comando para fazer com que o baralho comprasse cartas aleatorias.
    Vlw o

  136. Thiago Melo says:

    Firefox 3.6.13 Linux

    Você pode tentar uma função de gerar números aleatórios (random).

  137. Aloisio says:

    Chrome 9.0.597.98 Windows 7

    ae tiago eu queria saber como tirar seus créditos pode explicar?

  138. Thiago Melo says:

    Firefox 3.6.13 Windows 7

    Voce ta falando do titulo da janela? e so editar o label do form.

  139. Elvis says:

    Firefox 4.0.1 Windows XP

    Olá Thiago!
    Muito obrigado pelo tutorial.
    Está uma maravilha.

    Consegui direitinho, criei também muito mais funcionalidades.
    Coloquei, que só quem colocasse a senha no lugar correto, pudesse ter o nome de [ADM], por exemplo.

    Queria saber, se tem algum modo, de tirar alguma pessoa por apelido ou IP do chat.

    Aguardo respostas.
    Até.

  140. Elvis says:

    Firefox 4.0.1 Windows XP

    Queria também saber, se tem por exemplo,
    algum modo, de fazer com que isso aconteça:

    Pré-defino um mediaplayer com o som “riso”.
    Quando o usuário do chat digita “/riso”, o mediaplayer toca.

    Até aqui tudo bem.
    Mas queria fazer com que ele enviasse uma mensagem para o socket, e em todos os usuários do chat, o mediaplayer tocasse.

    Tem algum modo?
    Como?

    Até.

  141. Thiago Melo says:

    Firefox 4.0 Linux

    Elvis ter como tem, mas como eu já citei acima, eu não implementei um controle de usuário por conexão para você poder tirar alguém da sala e etc.

    Como minha experiencia com Delphi foi apenas na faculdade, depois desse chat eu nunca me aprofundei para ver outras funcionalidades como “mediaplayer” e etc.

  142. Caio says:

    Firefox 5.0 Windows 7

    Aew man pode me ajudar ?
    nao entendi isso aqui

    Primeiro declare os procedimentos abaixo:
    procedure S_ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);

    procedure S_ClienteDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure S_ClienteError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure S_ClienteRead(Sender: TObject; Socket: TcustomWinSocket);

    Como assim “Primeiro DECLARE os procedimentos abaixo” , como assim DECLARE ?

  143. Thiago Melo says:

    Firefox 5.0 Linux

    Alguns procedimentos já são declarados automaticamente pelo delphi outros não, no caso você tem que ir no código e declarar antes de criar a procedure.

  144. Rafael says:

    Firefox 3.6.20 Windows 7

    Bah me ajudou bastante, tava procurando um exemplo simples de client e server.
    Abraços e Sucesso

  145. joao says:

    Chrome 15.0.874.121 Windows XP

    Cara estou confuso quando digito e presso ENTER a mensagem sai assim:

    [:::Gabriel]JOAO esxreveu :
    depois dos : n aparece a msg pq:????????????

  146. Thiago Melo says:

    Chromium 15.0.874.121 Linux

    Da uma olhada no código, nos warnings do log de compilação para ver se faltou alguma variável, eu fiz esse código a muito tempo e confesso que lembro mais nada de Delphi.

  147. Vilma says:

    MSIE 7.0 Windows XP

    Thiago, bom dia.

    Estudando seu desenvolvimento acima de alguns anos atrás quero saber se existe algum tipo de novo projeto que define um atendimento com mais de um operador e vários usuários, com a gravação das conversas, de repente por assunto.

    Agradeço, muito se tiver alguma coisa para ajudar-me.

  148. walter says:

    Firefox 15.0.1 Windows XP

    ola thiago
    gostaria de conversar com voce
    sobre a criaçao de um chatclient
    gostaria de contato para conversar e acerta valores
    aguardo
    obrigado
    walter

  149. Josimar says:

    MSIE 7.0 Windows 7

    Legal, entrem no meu blog, ainda está em construção mas os códigos estão massa!

  150. Fabrício Daniel Freitas says:

    Chromium 34.0.1847.132 Linux

    Funciona da mesma forma no free pascal com Lazarus?

  151. William pedroso says:

    Chrome 40.0.2214.93 Windows

    Alguém ai conseguiu uma forma de enviar msgs para redes de distintas?

  152. Luis says:

    Chrome 43.0.2357.130 Windows 7

    Thiago,

    Li seu Posto CRIANDO UM SISTEMA DE CHAT NO DELPHI, estou fazendo em Delphi 7 um Cliente e Servidor para Consultar pelo CPF um Retorno a cada Cliente, só que quando vários Clientes acessa o Servidor ao mesmo tempo o Retorno de um Cliente Conectado devolve o Retorno para todos Conectados, dai o Retorno vai errado.
    Voce teria um exemplo para cada Cliente que conectar eu enviar o Retorno só para ele.

  153. Frederico says:

    Chrome 51.0.2704.103 Windows 7

    Muito legal! Obrigado.


pfSense 2.0 e...

Ano passado eu tentei me aventurar a configurar um servidor ...

GVT TV ...

A GVT está lançando seu novo produto, Televisão por Assinatura ...

Novo Blog, quem...

Hoje resolvi voltar a postar no blog, aproveitei para trocar ...

FlashPlayer no Snep,...

Esses dias pediram para eu ouvir umas ligações, e era ...

VMware vCenter Converter...

Esses dias chegou um servidor novo aqui na empresa, um ...

Ultimo post de...

Bom esta semana final de 2010 eu estava aqui de ...

Migração do Voip...

Bom quando terminou a migração eu fiquei direto na empresa ...

Asterisk com Snep...

A tempos venho comentando sobre Asterisk e Snep aqui no ...

Implementações na Radiologia

Estou fazendo implementações de novos sistemas na Radiologia, o primeiro ...

FISL 11 –...

Opa dia 2 do FISL foi ontem lol. Mas não ...