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

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

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

Apresentações semelhantes


Apresentação em tema: "Sistemas Distribuídos José Pacheco de Almeida Prado Socket em C# Capítulo 3."— 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. 12/1/2014Sistemas Distribuídos – prof. Pacheco2

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco3

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco4

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco5

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 1000 pois as inferiores são utilizadas pelo sistema operacional. 12/1/2014Sistemas Distribuídos – prof. Pacheco6

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco7

8 Implementando uma aplicação com Socket Temos que criar uma aplicação Servidor e outra Cliente. 12/1/2014Sistemas Distribuídos – prof. Pacheco8

9 Implementando o Servidor 1. Criar um projeto do tipo WindowsForm com o nome ServidorSocket. 2. Incluir um botão que será utilizado para enviar mensagem do servidor para o cliente. 12/1/2014Sistemas Distribuídos – prof. Pacheco9

10 Implementando o Servidor 12/1/2014Sistemas Distribuídos – prof. Pacheco10

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

12 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; 12/1/2014Sistemas Distribuídos – prof. Pacheco12 Implementando uma aplicação com Socket

13 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; 12/1/2014Sistemas Distribuídos – prof. Pacheco13 Implementando uma aplicação com Socket

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco14

15 Thread public Form1() { InitializeComponent(); thread = new Thread(new ThreadStart(RunServidor)); thread.Start(); } 12/1/2014Sistemas Distribuídos – prof. Pacheco15

16 Thread public void RunServidor() { } 12/1/2014Sistemas Distribuídos – prof. Pacheco16 Executa o Socket

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 /1/2014Sistemas Distribuídos – prof. Pacheco17

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"); 12/1/2014Sistemas Distribuídos – prof. Pacheco18

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"); 12/1/2014Sistemas Distribuídos – prof. Pacheco19

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); 12/1/2014Sistemas Distribuídos – prof. Pacheco20

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); 12/1/2014Sistemas Distribuídos – prof. Pacheco21

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); 12/1/2014Sistemas Distribuídos – prof. Pacheco22

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(); 12/1/2014Sistemas Distribuídos – prof. Pacheco23

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(); 12/1/2014Sistemas Distribuídos – prof. Pacheco24

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(); 12/1/2014Sistemas Distribuídos – prof. Pacheco25

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); 12/1/2014Sistemas Distribuídos – prof. Pacheco26

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); 12/1/2014Sistemas Distribuídos – prof. Pacheco27

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"); } 12/1/2014Sistemas Distribuídos – prof. Pacheco28

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"); } 12/1/2014Sistemas Distribuídos – prof. Pacheco29

30 Botão Envia try { binaryWriter.Write("Olá Mundo!!!! ); } catch (SocketException socketEx) { MessageBox.Show(socketEx.Message, "Erro"); } 12/1/2014Sistemas Distribuídos – prof. Pacheco30

31 Botão Envia try { binaryWriter.Write("Olá Mundo!!!! ); } catch (SocketException socketEx) { MessageBox.Show(socketEx.Message, "Erro"); } 12/1/2014Sistemas Distribuídos – prof. Pacheco31

32 Implementando o Cliente O Cliente tem uma estrutura semelhante ao do Servidor. Seu funcionamento também é baseado em uma Thread. 12/1/2014Sistemas Distribuídos – prof. Pacheco32

33 Thread public Form1() { InitializeComponent(); thread = new Thread(new ThreadStart(RunCliente)); thread.Start(); } 12/1/2014Sistemas Distribuídos – prof. Pacheco33

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco34

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. 12/1/2014Sistemas Distribuídos – prof. Pacheco35

36 Implementando o Cliente private NetworkStream networkStream; private BinaryWriter binaryWriter; private BinaryReader binaryReader; private TcpClient tcpClient; private Thread thread; 12/1/2014Sistemas Distribuídos – prof. Pacheco36

37 Implementando o Cliente public void RunCliente() { try { tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); 12/1/2014Sistemas Distribuídos – prof. Pacheco37

38 Implementando o Cliente public void RunCliente() { try { tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); 12/1/2014Sistemas Distribuídos – prof. Pacheco38

39 Implementando o Cliente { tcpClient = new TcpClient(); tcpClient.Connect(" ", 2001); networkStream = tcpClient.GetStream(); binaryWriter = new BinaryWriter(networkStream); binaryReader = new BinaryReader(networkStream); 12/1/2014Sistemas Distribuídos – prof. Pacheco39

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(); 12/1/2014Sistemas Distribuídos – prof. Pacheco40

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"); 12/1/2014Sistemas Distribuídos – prof. Pacheco41

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"); 12/1/2014Sistemas Distribuídos – prof. Pacheco42

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

44 Erro na Conexão 12/1/2014Sistemas Distribuídos – prof. Pacheco44


Carregar ppt "Sistemas Distribuídos José Pacheco de Almeida Prado Socket em C# Capítulo 3."

Apresentações semelhantes


Anúncios Google