A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sistemas Distribuídos

Apresentações semelhantes


Apresentação em tema: "Sistemas Distribuídos"— Transcrição da apresentação:

1 Sistemas Distribuídos
José Pacheco de Almeida Prado Socket em C# Capítulo 3

2 Comunicação via socket com C#
Socket é o elo de ligação entre os processos do servidor e do cliente. Ele é a “porta” na qual os processos enviam e recebem mensagens. De acordo com JAMES F KUROSE: “socket é a interface entre a camada de aplicação e a de transporte dentro de uma máquina”. Sistemas Distribuídos – prof. Pacheco 25/03/2017

3 Comunicação via socket com C#
Através de um socket podemos estabelecer a comunicação entre máquinas possibilitando o envio e recebimento de dados. Sistemas Distribuídos – prof. Pacheco 25/03/2017

4 Comunicação via socket com C#
A interface padronizada de sockets surgiu originalmente no sistema operacional Unix BSD (Berkeley Software Distribution). Tinha a função de suporte a comunicação em rede. Esta interface é a base para a maioria das interfaces entre protocolos de internet TCP/IP existente. Sistemas Distribuídos – prof. Pacheco 25/03/2017

5 Comunicação via socket com C#
Através de um socket podemos estabelecer a comunicação entre máquinas possibilitando o envio e recebimento de dados. Sistemas Distribuídos – prof. Pacheco 25/03/2017

6 Comunicação via socket com C#
A identificação de um socket na rede é realizada por um IP e um porta. Comumente utiliza-se portas acima de pois as inferiores são utilizadas pelo sistema operacional. Sistemas Distribuídos – prof. Pacheco 25/03/2017

7 Comunicação via socket com C#
Sua comunicação é realizada pelos protocolos UDP ou TCP. Assim, é possível termos tanto comunicação orientada a conexão (via TCP), quanta não orientada a conexão (via UDP). O socket abstrai esse conceito, permitindo assim a utilização de qualquer um dos meios. Sistemas Distribuídos – prof. Pacheco 25/03/2017

8 Implementando uma aplicação com Socket
Temos que criar uma aplicação Servidor e outra Cliente. Sistemas Distribuídos – prof. Pacheco 25/03/2017

9 Implementando o Servidor
Criar um projeto do tipo WindowsForm com o nome ServidorSocket. Incluir um botão que será utilizado para enviar mensagem do servidor para o cliente. Sistemas Distribuídos – prof. Pacheco 25/03/2017

10 Implementando o Servidor
Sistemas Distribuídos – prof. Pacheco 25/03/2017

11 Implementando uma aplicação com Socket
No C# para se trabalhar com sockets os recursos encontram-se no namespace System.Net.Sockets. Sistemas Distribuídos – prof. Pacheco 25/03/2017

12 Implementando uma aplicação com Socket
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; Sistemas Distribuídos – prof. Pacheco 25/03/2017

13 Implementando uma aplicação com Socket
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; Sistemas Distribuídos – prof. Pacheco 25/03/2017

14 Implementando o Servidor
O Servidor quanto o Cliente trabalha com processamento em paralelo (Thread) para evitar que a aplicação fique travada até o término do processamento, ou para manter um processamento dedicado e contínuo que é o caso do servidor. Sistemas Distribuídos – prof. Pacheco 25/03/2017

15 Thread public Form1() { InitializeComponent(); thread = new Thread(new ThreadStart(RunServidor)); thread.Start(); } Sistemas Distribuídos – prof. Pacheco 25/03/2017

16 Thread Executa o Socket public void RunServidor() { }
Sistemas Distribuídos – prof. Pacheco 25/03/2017

17 Implementando o Servidor
No exemplo, para realizar a comunicação o Servidor utiliza o objeto TcpListener que fica escutando toda requisição no IP porta 2001. Sistemas Distribuídos – prof. Pacheco 25/03/2017

18 Iniciando o Socket public void RunServidor() { TcpListener tcpListener; try IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(" "), 2001); tcpListener = new TcpListener(ipEndPoint); tcpListener.Start(); MessageBox.Show("Servidor habilitado e escutando porta...", "Servidor"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

19 Iniciando o Socket public void RunServidor() { TcpListener tcpListener; try IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(" "), 2001); tcpListener = new TcpListener(ipEndPoint); tcpListener.Start(); MessageBox.Show("Servidor habilitado e escutando porta...", "Servidor"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

20 Esperando Cliente... tcpListener.Start(); MessageBox.Show("Servidor habilitado e escutando porta...", "Servidor"); socket = tcpListener.AcceptSocket(); networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); Sistemas Distribuídos – prof. Pacheco 25/03/2017

21 Esperando Cliente... tcpListener.Start(); MessageBox.Show("Servidor habilitado e escutando porta...", "Servidor"); socket = tcpListener.AcceptSocket(); networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); Sistemas Distribuídos – prof. Pacheco 25/03/2017

22 Definindo um Fluxo de Dados para a Rede....
tcpListener.Start(); MessageBox.Show("Servidor habilitado e escutando porta...", "Servidor"); socket = tcpListener.AcceptSocket(); networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); Sistemas Distribuídos – prof. Pacheco 25/03/2017

23 Conectando ao Cliente... networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); Sistemas Distribuídos – prof. Pacheco 25/03/2017

24 Conectando ao Cliente... networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); Sistemas Distribuídos – prof. Pacheco 25/03/2017

25 Enquanto isto no lado do Cliente...
networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); Sistemas Distribuídos – prof. Pacheco 25/03/2017

26 Loop de Espera MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); MessageBox.Show("Mensagem: " + messageReceived, "Servidor"); } while (socket.Connected); Sistemas Distribuídos – prof. Pacheco 25/03/2017

27 Loop de Espera MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); MessageBox.Show("Mensagem: " + messageReceived, "Servidor"); } while (socket.Connected); Sistemas Distribuídos – prof. Pacheco 25/03/2017

28 Fim da Conexão } while (socket.Connected); catch (Exception ex) { MessageBox.Show(ex.Message); } finally binaryReader.Close(); binaryWriter.Close(); networkStream.Close(); socket.Close(); MessageBox.Show("Conexão Finalizada", "Servidor"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

29 Fim da Conexão } while (socket.Connected); catch (Exception ex) { MessageBox.Show(ex.Message); } finally binaryReader.Close(); binaryWriter.Close(); networkStream.Close(); socket.Close(); MessageBox.Show("Conexão Finalizada", "Servidor"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

30 Botão Envia try { binaryWriter.Write("Olá Mundo!!!!” ); }
catch (SocketException socketEx) MessageBox.Show(socketEx.Message, "Erro"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

31 Botão Envia try { binaryWriter.Write("Olá Mundo!!!!” ); }
catch (SocketException socketEx) MessageBox.Show(socketEx.Message, "Erro"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

32 Implementando o Cliente
O Cliente tem uma estrutura semelhante ao do Servidor. Seu funcionamento também é baseado em uma Thread. Sistemas Distribuídos – prof. Pacheco 25/03/2017

33 Thread public Form1() { InitializeComponent(); thread = new Thread(new ThreadStart(RunCliente)); thread.Start(); } Sistemas Distribuídos – prof. Pacheco 25/03/2017

34 Implementando o Cliente
Na aplicação Cliente o objeto TcpClient é informado sobre o IP (ou DNS) e porta do servidor que irá se conectar. Após esse a realização toda a comunicação é feita por meio de stream através do objeto NetworkStream. Sistemas Distribuídos – prof. Pacheco 25/03/2017

35 Implementando o Cliente
Na aplicação Cliente o objeto TcpClient é informado sobre o IP (ou DNS) e porta do servidor que irá se conectar. Após esse a realização toda a comunicação é feita por meio de stream através do objeto NetworkStream. Sistemas Distribuídos – prof. Pacheco 25/03/2017

36 Implementando o Cliente
private NetworkStream networkStream; private BinaryWriter binaryWriter; private BinaryReader binaryReader; private TcpClient tcpClient; private Thread thread; Sistemas Distribuídos – prof. Pacheco 25/03/2017

37 Implementando o Cliente
public void RunCliente() { try tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); Sistemas Distribuídos – prof. Pacheco 25/03/2017

38 Implementando o Cliente
public void RunCliente() { try tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); Sistemas Distribuídos – prof. Pacheco 25/03/2017

39 Implementando o Cliente
{ tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); networkStream = tcpClient.GetStream(); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); Sistemas Distribuídos – prof. Pacheco 25/03/2017

40 Enquanto isto no Servidor....
networkStream = new NetworkStream(socket); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); MessageBox.Show("Conexão Realizada!", "Servidor"); binaryWriter.Write("\nConexão Efetuada!"); string messageReceived = ""; do { messageReceived = binaryReader.ReadString(); Sistemas Distribuídos – prof. Pacheco 25/03/2017

41 Loop de Espera String message = ""; do { try
message = binaryReader.ReadString(); MessageBox.Show(message, "Mensagem Recebida"); } catch (Exception ex) MessageBox.Show(ex.Message, "Erro"); message = "FIM"; } while (message != "FIM"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

42 Loop de Espera String message = ""; do { try
message = binaryReader.ReadString(); MessageBox.Show(message, "Mensagem Recebida"); } catch (Exception ex) MessageBox.Show(ex.Message, "Erro"); message = "FIM"; } while (message != "FIM"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

43 Botão Envia try { binaryWriter.Write("O cliente está ativo!!!!"); }
catch (SocketException socketEx) MessageBox.Show(socketEx.Message, "Erro"); Sistemas Distribuídos – prof. Pacheco 25/03/2017

44 Erro na Conexão Sistemas Distribuídos – prof. Pacheco 25/03/2017


Carregar ppt "Sistemas Distribuídos"

Apresentações semelhantes


Anúncios Google