C# - Usando classes para a programação com a web (.NET Core) - VI


Hoje vamos continuar a apresentar algumas classes que facilitam a programação para web na linguagem C#.


Continuando a quinta parte do artigo vamos criar um servidor usando sockets.
 

 

Se você esta acompanhando esta série de artigos e chegou aqui, você provavelmente quer saber como fazer um servidor e um cliente simples em C#, usando o código mais curto possível e o método mais fácil de entender.

 

Os sockets em uma rede de computadores são usados ​​para estabelecer uma conexão entre dois ou mais computadores e usados ​​para enviar dados de um computador para outro. Cada computador na rede é chamado de nó. Os sockets usam os endereços IP dos nós e um protocolo de rede para criar um canal seguro de comunicação e usar esse canal para transferir dados.

 

Dessa forma na comunicação usando sockets,  um nó atua como ouvinte e outro nó atua como um cliente. O nó do listener abre-se sobre um endereço IP pré-estabelecido e em um protocolo predefinido e inicia a escuta. Os clientes que desejam enviar mensagens para o servidor começam a transmitir mensagens no mesmo endereço IP e no mesmo protocolo. Uma conexão típica de soquete usa o Protocolo de Controle de Transmissão (TCP) para se comunicar.

 

Veremos a seguir como criar um socket e configurar um nó do servidor listener que comece a escutar as mensagens que chegam a ele por meio do IP e protocolo predefinidos. Também veremos como criar um aplicativo cliente que enviará uma mensagem ao servidor ouvinte e a lerá.

Mas, o que é mesmo um socket ?

Um socket pode ser entendido como uma porta de um canal de comunicação que permite a um processo executando em um computador enviar/receber mensagens para/de outro processo que pode estar sendo executado no mesmo computador ou num computador remoto.

Os sockets permitem então a comunicação processo a processo da seguinte forma :

Abaixo temos uma figura com que representa a comunicação de sockets e a pilha TCP/IP:

Tipos de serviço de transporte:
  • Datagrama - transporte não orientado a conexão  e sem controle de erros ( protocolo UDP)
  • DataStream - transporte orientado a conexão com controle de erros ( protocolo TCP )

 

Criando um servidor Listner

 

Vamos criar um projeto .NET Core tipo Console no VS 2017 Community chamado ServidorTeste.

 

Na aplicação console abra o arquivo Program e inclua o código abaixo:

 

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ServidorTeste
{
    class Program
    {
        static void Main(string[] args)
        {
            // Um Socket Listener atua como um servidor e ouve as
            // mensagens de entrada na porta e no protocolo especificados.
            IniciaServidor();
            return;
        }
        public static void IniciaServidor()
        {
            // Pega o endereço IP do Host que é usado para conexão
            // No exemplo, pegamos um endereço IP que é  : 127.0.0.1  
            // Se o host possuir multiplos endereços pegamos uma lista
            IPHostEntry host = Dns.GetHostEntry("localhost");
            IPAddress ipAddress = host.AddressList[0];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
            try
            {
                // Cria um Socket que vai usar o protocolo TCP
                Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                // Um Socket precisa estar associado com um endpoint usando o método Bind
                listener.Bind(localEndPoint);
                // Especifica quantos requests um socket pode escutar antes do servidor ficar ocupado
                // Vamos definir apenas 10 requests por vez
                listener.Listen(10);
                Console.WriteLine("Aguardando a conexão...");
                Socket handler = listener.Accept();
                // Dados chegando do cliente
                string data = null;
                byte[] bytes = null;
                while (true)
                {
                    bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                    if (data.IndexOf("<EOF>") > -1)
                    {
                        break;
                    }
                }
                Console.WriteLine("Texto recebido : {0}", data);
                byte[] msg = Encoding.ASCII.GetBytes(data);
                handler.Send(msg);
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.WriteLine("\n Tecle algo para continuar...");
            Console.ReadKey();
        }
    }
}

 

O código acima (que já esta comentado) cria um ouvinte Socket no host local usando o protocolo TCP e quaisquer mensagens capturadas do cliente exibindo-as no console.
 

Pela definição o ouvinte pode solicitar até 10 clientes por vez e na 11a solicitação vai receber uma mensagem de que o servidor esta ocupado.

 

Executando o projeto teremos o resultado abaixo:


 

Precisamos agora criar a aplicação cliente que estabelece a conexão com o servidor.
 

Na próxima parte do artigo vamos criar o cliente.

 

Pegue o projeto completo aqui:  ServidorTeste.zip
 

"Amo ao SENHOR, porque ele ouviu a minha voz e a minha súplica.
Porque inclinou a mim os seus ouvidos; portanto, o invocarei enquanto viver."
Salmos 116:1,2

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti