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 :
comunicação local : processos locais usando sockets locais
comunicação remota : processos remotos usando sockets em rede (TCP/IP)
Abaixo temos uma figura com que representa a comunicação de sockets e a pilha TCP/IP:
Tipos de serviço de transporte:
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
NET Core ou .NET Framework - Macoratti
NET Core - Padrão Repositório - Macoratti
NET Core - Sua primeira aplicação Console Application - Macoratti
NET Core 3.0 e Visual Studio 2019 - Macoratti
NET- Usando Sockets - Macoratti
C# - Transferindo arquivos usando Sockets - Macoratti
C# - Compartilhando arquivos - Cliente/Servicor (socket) - Macoratti
C # - Criando um Chat - Parte 1 - O Cliente - Macoratti