Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.