Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Criando um Chat em C# (parte 1)

Imprimir
Avaliação do Usuário: / 25
PiorMelhor 

 

CRIANDO UM CHAT EM C#

O primeiro passo para criar um CHAT é entender como ele funciona, como eu consigo enviar e receber mensagens, como estou conectado com outra pessoa. Na verdade tudo é muito simples, em um CHAT você manda a mensagem, através da internet ela chega a um servidor, que através dele a mensagem é repassada para a pessoa com quem você está conversando.

Agora que temos uma noção básica de como enviamos e recebemos mensagens, vamos começar o nosso próprio CHAT. Para esse projeto, precisaremos do “Visual C# Express”, que podemos encontrar no site www.microsoft.com/express/Downloads/




encontre o link para o Visual C# Express;

1. Na página para a qual você será direcionado encontre e clique no link INSTALL NOW – ENGLISH



2. O arquivo que será baixado tem pouco mais de 3 MB; Não é necessário guardá-lo em seu computador já que ele inicia uma instalação on-line, ou seja, durante a instalação é que serão baixados os arquivos necessários para o funcionamento do Visual C# Express;

Após o inicio da execução da instalação deverá ser apresentada a janela abaixo:

Se concordar em enviar informações sobre o uso do Visual C# Express para a Microsoft deixe a caixa de seleção marcada e clique em AVANÇAR, senão desmarque-a antes de continuar;


 

3. Na próxima janela, antes de continuar, você deve aceitar os termos de licenciamento do software, leia o contrato atentamente e, caso concordar, selecione a opção I HAVE READ AND ACCEPT THE LICENSE TERMS;


 

4. Na janela seguinte temos a opção de instalar o Microsoft SQL Server 2008 Express, Selecione se desejar e avance;

 

 

 

 

5. Mude o local de instalação se achar necessário e clique no botão INSTALL:


 

 

6. A instalação irá iniciar e poderá demorar um tempo considerável dependendo da velocidade de sua conexão à Internet e o computador poderá ser reiniciado durante o processo;

 

 


 

 

Terminado a instalação, vamos começar nosso projeto:

  • Abra o Visual C# Express, e clique em “New Project...”;

  • Feito isso, clique em “Windows Forms Application”, e de um nome para seu projeto e clique em OK;

 

  • Feito isso, iremos alterar o nome de nosso formulário Form1.cs, para isso, clique com o botão direito do mouse, e selecione a opção Rename;



  • De o nome de frmCliente.cs (lembre –se sempre de colocar o .cs, pois caso contrário o programa apresentara erro na hora da compilação), aparecerá uma tela pedindo a confirmação da mudança do nome, clique na opção SIM;



  • Feito isso, iremos inserir alguns componentes em nosso formulário, encontre no menu do lado esquerdo (Toolbox) os componentes: 2 Button, 2 Label, e 4 TextBox; (para inserir os componentes no form, basta clicar e arrastar para o form)

 

 

  • 1. Selecione o 3º TexBox, clique com o botão direito e selecione a opção propertties;

 

 

  • Na tela que apareceu, encontre a opção Multiline, o valor estará em False, mude – o para True;

 

  • Com isso poderemos mudar o tamanho do TextBox3 para multilinear;

 

  • Agora iremos mudar o nome das propriedades dos componentes, mude – as conforme a tabela abaixo:

 

COMPONENTE NAME TEXT
Label1 Label1 Servidor IP
Label2 Label2 Usuário
TexBox1 txtServidorIP
TexBox2 txtUsuario
TexBox3 txtLog
TexBox4 txtMessagem
Button1 btnConectar Conectar
Button2 btnEnviar Envia
  • Feito isso, de um duplo clique no botão Conectar, arraste a página até o topo e digite os seguintes comandos:

 
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;


 

  • Feito isso, antes do comando (“private void btnConectar_Click(object sender, EventArgs e)”), digite os seguintes comandos:


 
private string NomeUsuario = "Desconhecido";
private StreamWriter stwEnviador;
private StreamReader strReceptor;
private TcpClient tcpServidor;
private delegate void AtualizaLogCallBack(string strMensagem);
private delegate void FechaConexaoCallBack(string strMotivo);
private Thread mensagemThread;
private IPAddress enderecoIP;
private bool Conectado;

 

  • Volte para o formulário clicando na opção frmCliente.cs, novamente de um duplo clique no botão Conectar e digite os seguintes comandos:


 
if (Conectado == false)
{
InicializaConexao();
}
else
{
FechaConexao("Desconectado a pedido do usuário.");
}

 

  • Agora iremos programar a inicialização da conexão com o servidor, aperte uma vez a seta para baixo, de um enter e digite o seguinte código:

 

private void InicializaConexao()
{
enderecoIP = IPAddress.Parse(txtServidorIP.Text);
tcpServidor = new TcpClient();
tcpServidor.Connect(enderecoIP, 2502);
Conectado = true;
NomeUsuario = txtUsuario.Text;
txtServidorIP.Enabled = false;
txtUsuario.Enabled = false;
txtMensagem.Enabled = true;
btnEnviar.Enabled = true;
btnConectar.Text = "Desconectado";
stwEnviador = new StreamWriter(tcpServidor.GetStream());
stwEnviador.WriteLine(txtUsuario.Text);
stwEnviador.Flush();
mensagemThread = new Thread(new ThreadStart(RecebeMensagens));
mensagemThread.Start();
}


  • Agora iremos programar para que possamos receber as mensagens:

 

 
private void RecebeMensagens()
{
strReceptor = new StreamReader(tcpServidor.GetStream());
string ConResposta = strReceptor.ReadLine();
if (ConResposta[0] == '1')
{
this.Invoke(new AtualizaLogCallBack(this.AtualizaLog), new object[] { "Conectado com Sucesso!" });
}
else
{
string motivo = "Não Conectado : ";
motivo += ConResposta.Substring(2, ConResposta.Length - 2);
this.Invoke(new FechaConexaoCallBack(this.FechaConexao), new object[] { motivo });
return;
}
while (Conectado)
{
this.Invoke(new AtualizaLogCallBack(this.AtualizaLog), new object[] { strReceptor.ReadLine() });
}
}

 

  • Feito isso, iremos programar um atualizador de mensagens, para que possamos recebe-las automaticamente:


 
private void AtualizaLog(string strMensagem)
{
txtLog.AppendText(strMensagem + "\r\n");
}

 

  • Agora, volte para o formulário inicial, e de um duplo clique no botão Enviar, e digite o seguinte código:

 

 
EnviaMensagem();


  • Feito isso, volte para o formulário inicial, com o botão direito clique no 3º TextBox, e clique em properties, seleciona a janela events, procure pela opção KeyPress e digite o código abaixo:

 

 

 

 
if (e.KeyChar == (char)13)
{
EnviaMensagem();
}

 

  • Para enviarmos uma mensagem, precisamos clicar no botão Enviar ou pressionando a tecla Enter, ao fazermos isso um evento será gerado, nos permitindo visualizar as mensagens. Vamos agora programar esse evento:


 
private void EnviaMensagem()
{
if (txtMensagem.Lines.Length >= 1)
{ 
stwEnviador.WriteLine(txtMensagem.Text);
stwEnviador.Flush();
txtMensagem.Lines = null;
}
txtMensagem.Text = "";
}

 

  • Agora iremos fechar a conexão com o servidor:

 

private void FechaConexao(string Motivo)
{
txtLog.AppendText(Motivo + "\r\n");
txtServidorIP.Enabled = true;
txtUsuario.Enabled = true;
txtMensagem.Enabled = false;
btnEnviar.Enabled = false;
btnConectar.Text = "Conectado";
 
Conectado = false;
stwEnviador.Close();
strReceptor.Close();
tcpServidor.Close();
}


  • Suba a página até encontrar o comando “public frmCliente()”, e digite o seguinte comando:

 

 
Application.ApplicationExit += new EventHandler(OnApplicationExit);

 

  • 1. Feito isso, dessa a página até encontrar o comando “Private Void FechaConexao (String Motivo)”, após encerra-lo digite o comando abaixo:

 
public void OnApplicationExit(object sender, EventArgs e)
{
if (Conectado == true)
{
Conectado = false;
stwEnviador.Close();
strReceptor.Close();
tcpServidor.Close();
}
}

 

  • Feito isso, compile o seu projeto pressionando a tecla F5 do teclado, se houver erros verifique o tutorial novamente para ver se não há erros de sintaxe.

 

 

Continuação acesse http://seucurso.com.br/index.php?option=com_content&view=article&id=120:criando-um-chat-em-c-parte2&catid=905:linguagem-de-programacao&Itemid=69

Programa beseado pelo site http://www.macoratti.net/11/08/c_chat1.htm.

 

 

Comentários  

 
0 #2 Erro ao desconectarSérgio Vasconcelos 06-06-2016 16:08
Boa tarde,

Comigo também aconteceu a mesma coisa, qual seria a solução pra esse problema?
Citar
 
 
+1 #1 erropedro01 28-03-2013 11:51
está dando um erro na hora de desconecta
Não é possível ler os dados da conexão de transporte: Uma operação de bloqueio foi interrompida por uma chamada a WSACancelBlocki ngCall.

nessa linha
while (Conectado)
17.
{
18.
this.Invoke(new AtualizaLogCall Back(this.AtualizaLog), new object[] { strReceptor.ReadLine() });
19.
}
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: