Buscar

artigo_sockets

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 de 5 
Comunicação pela rede através de socket 
Cristiano Soares Drescher 
c.drescher@hotmail.com 
Universidade do Vale do Rio dos Sinos. Avenida Unisinos, 950 - 93352-000, São Leopoldo, RS, Brasil 
 
 
 
Resumo – Atualmente existem algumas tecnologias que permitem a 
comunicação entre máquinas. Uma das tecnologias/mecanismos mais 
comuns para comunicação entre máquinas é os sockets. Socket é um 
mecanismo de comunicação, usado normalmente para implementar um 
modelo cliente/servidor, que permite a troca de mensagens entre os 
processos de uma máquina/aplicação servidor e de uma 
máquina/aplicação cliente. Este resumo nos mostra como esta 
comunicação é feita. 
I. INTRODUÇÃO 
 Com o acelerado crescimento da tecnologia, as 
pessoas e principalmente as empresas, vêm buscando o 
desenvolvimento de redes de computadores com 
comunicação cada vez mais rápida e eficaz. De acordo com 
Stallings (2005), houve uma queda no custo de equipamentos 
de processamento de dados e aumento de sua capacidade. Por 
isso hoje é muito comum o uso de computadores de pequeno 
porte ligados em redes e não a utilização de computadores de 
grande porte como mainframes. 
Segundo Correia (2008), o mecanismo que oferece 
capacidade para troca de informações em rede mais utilizado 
atualmente é chamado socket. Um socket define um 
mecanismo de troca de dados entre dois ou mais processos 
distintos, processos estes que podem estar em execução na 
mesma máquina ou em máquinas diferentes, porém ligadas 
em rede. Uma vez estabelecida à ligação entre dois processos 
através dos socket, podem ser enviados dados em ambos os 
sentidos até que um dos pontos termine a ligação. A 
implementação de um socket pode ser feito a partir de várias 
linguagens de programação. 
assunto, as áreas de controvérsias (caso existam), a natureza e 
a extensão da contribuição pretendida. 
 
II. REFERENCIAL TEÓRICO 
 A conexão por sockets tem origem em 1980, quando a 
ARPA (Advanced Research Projects Agency, Agência de 
Projetos de Pesquisa Avançados), órgão do governo norte 
americano, forneceu recursos financeiros para que a 
Universidade da Califórnia em Berkeley II Simpósio de 
Excelência em Gestão e Tecnologia – SEGeT'2005 1059 
oferecesse uma implementação UNIX do pacote de 
protocolos TCP/IP. Sockets são estruturas que habilitam que 
dois ou mais aplicativos do tipo cliente / servidor que estão 
em rede, se conectem entre si (Franco; Silva, 2009). O 
termo sockets é bastante genérico, e é normalmente usado 
para designar um conjunto de primitivas que permitem que o 
programador tenha acesso aos serviços da camada de 
transporte de uma rede. 
 
A. Redes de computadores 
 As redes de computadores surgiram da necessidade de 
troca de informações e podem ser explicadas como sendo o 
conjunto de dois ou mais computadores interligados por 
meios eletrônicos e físicos, no intuito de trocarem 
informações de forma rápida e fácil, fornecendo aos 
utilizadores um campo mais vasto de atuação com 
compartilhamento de equipamentos, de recursos e de 
gerenciamento, tais como aplicações, ferramentas de 
comunicação, bases de dados, entre outras. (Franco; Silva, 
2009). 
 
B. Cliente e Servidor 
 O paradigma de programação distribuída através da 
separação das aplicações entre servidores e clientes foi à 
arquitetura de distribuição predominante nos anos 90. Com 
2 de 5 
este padrão de programação é acrescentada uma maior 
confiança ao sistema, pois a falha de uma máquina não 
compromete a operação do sistema como um todo e gera uma 
redução de custos, pois as máquinas clientes não precisam ser 
tão robustas, porque todo processamento é feito no servidor. 
(Franco; Silva, 2009). 
C. Sockets 
 Segundo Macoratti (2004) socket pode ser entendido como 
uma porta de um canal de comunicação que permite a um 
processo executando em um computador enviar ou receber 
mensagens para ou de outro processo que pode estar sendo 
executado no mesmo computador ou num computador 
remoto. 
Para que exista comunicação em rede, faz-se necessário o uso 
de um protocolo de comunicação. Um protocolo funciona 
como linguagem entre computadores em rede e para validar 
esta comunicação, é preciso que os computadores utilizem o 
mesmo protocolo. Existem diversos tipos de protocolos. As 
aplicações de sockets são feitas baseadas no protocolo 
TCP/IP. 
O socket representa um ponto de conexão para uma rede TCP 
/ IP, muito semelhante aos soquetes elétricos encontrados em 
casas, que fornecem um ponto de conexão para os aparelhos 
eletrodomésticos. Quando dois computadores querem manter 
uma conversação, cada um deles utiliza um socket. Um 
computador é chamado servidor (ele abre um socket e presta 
atenção às conexões), o outro computador denomina-se 
cliente (ele chama o socketservidor para iniciar a conexão). 
(Franco; Silva, 2009). 
 
D. TCP/IP e porta de comunicação 
 Para que efetivamente ocorra a comunicação entre 
máquinas mediante a pilha de protocolos TCP/IP o endereço 
IP é fundamental, porém outros dois fatores são essenciais e 
precisam ser definidos: o protocolo de transporte e a porta de 
comunicação. A esta tríade chamamos de socket, cuja função 
é identificar univocamente uma aplicação na rede. De fato, o 
sistema operacional associa o socket a um ou mais processos 
existentes na memória e o utiliza como canal para envio e 
recebimento dos dados relacionados pela rede. (Ariede, 
2009). 
A porta de comunicação corresponde a um valor inteiro de 16 
bits que serve para identificar aplicações, em um computador, 
que utilizam serviços de conexão. As portas de 1 a 1023 são 
chamadas de números de portas well known e são reservados 
para os serviços padrões da Internet. Portas de 1024 a 5000 
são denominadas portas efêmeros e são geralmente usados 
por clientes. Eles têm existência curta porque existem 
somente durante o período de tempo em que o serviço 
associado está em uso. Portas acima de 5000 são destinadas a 
servidores que não estão conectados à Internet. As portas de 
1024 a 63535 estão livres para uso das aplicações do usuário. 
(Seixas, 2009). 
 
E. Não Orientada a conexão 
 Neste tipo de troca de dados UDP ou Datagrama, 
não é estabelecida uma conexão entre a aplicação cliente e a 
servidora. A aplicação servidora estabelece uma porta que 
estará disponível para que qualquer cliente possa enviar 
dados. A comunicação é unidirecional e não há garantias de 
que os dados realmente chegarão. 
Abaixo temos a Figura 2 que representa a comunicação 
de sockets e a pilha TCP/IP, diferenciadas pelos tipos de 
serviço de transporte: o Datagrama - transporte não orientado 
a conexão e sem controle de erros (protocolo UDP) e o 
DataStream - transporte orientado a conexão com controle de 
erros ( protocolo TCP ). 
F. Comunicação entre sockets 
A comunicação entre os sockets TCP/IP acontece da 
seguinte forma: o servidor escolhe uma porta e aguarda 
conexões a essa porta, o cliente deve informar o endereço do 
servidor e a porta usada pelo servidor. Com essa informação 
o cliente solicita uma conexão ao servidor (Figura 3). 
Se após o pedido de conexão não ocorrer nenhum problema, 
o servidor aceita a conexão gerando um socket numa porta do 
servidor, o que vai criar um canal de comunicação entre o 
cliente e o servidor. 
 
 
3 de 5 
III – O SISTEMA 
Programas baseados em sockets são geralmente 
aplicações cliente-servidor. O servidor espera pedidos de seus 
clientes, os processa e retorna os resultados ao cliente. O 
cliente estabelece uma conexão com o servidor, conectando-
se a uma porta do servidor na máquina onde o servidor está 
sendo executado. É preciso saber qual o número da porta de 
uma aplicação antes de se iniciar um processo de conexão. 
O sistema desenvolvido é um programa que constitui um 
exemplo de aplicação cliente/servidor para envio de 
mensagens na linguagem C#. 
A – O Sistema Cliente 
a) Criaum socket e atribui um endereço a ele; 
b) Solicita a conexão do seu socket ao socket do servidor 
(conhece o endereço) 
c) Aguarda que a conexão seja estabelecida; 
d) Envia uma mensagem; 
e) Recebe a mensagem de resposta; 
f) Fecha a conexão com o servidor. 
O primeiro passo da aplicação cliente é a criação do socket, a 
linha de código seguinte mostra como é feita essa criação: 
m_socListener = new 
Socket(AddressFamily.InterNetwork,SocketType.Stream,Pro
tocolType.Tcp); 
 AddressFamily: Endereço da família que vamos 
utilizar, neste caso interNetwork que é o IP Versão 
4. 
 SocketType : O SocketType é o tipo de socket. 
Podemos usar sockets orientados à Conexão 
(stream) ou podemos utilizar conexões menos 
seguras no sentido de não serem orientadas à 
conexão (datagrams). 
 ProtocolType: Como estamos a utilizar TCP/IP, 
definimos o protocolo como sendo TCP. 
Depois da criação do socket, a conexão com servidor é 
estabelecida, para isso precisamos de duas informações: 
Endereço IP e Porta de Conexão. 
public IPEndPoint(System.Net.IPAddress address, int port); 
No .NET existe uma classe dentro do namespace System.Net, 
chamada IPEndPoint que nos permite representar um 
computador como um Endereço Ip e N.º da Porta. O 
IPEndPoint tem dois construtores: um toma o endereço IP e 
N.º da Porta, e o outro toma um N.º Long e Nº da Porta. 
Como temos um endereço IP, vamos usar o 1º construtor. 
O 1º parâmetro a classe IPAddress, tem um método estático 
chamado Parse que retorna um IPAddress dando uma String, 
ao invés de usarmos o IP, usamos o nome do computador, 
numa rede local. O 2º parâmetro, toma o N.º da Porta. Assim 
que tivermos um Endpoint, podemos utilizar o método 
Connect do nosso socket para conectar ao EndPoint (Servidor 
Remoto). 
Após feita as definições a conexão é estabelecida, através da 
linhas de códigos seguinte: 
System.Net.IPAddress ipAdd = 
System.Net.IPAddress.Parse("127.0.0.1"); 
System.Net.IPEndPoint remoteEP = new IPEndPoint 
(iAdd,8221); 
m_socClient.Connect (remoteEP); 
Se o servidor estiver a pronto e tiver respectivo a conexões 
(listening) a conexão será estabelecida com sucesso. Caso o 
servidor não esteja a pronto, ou não esteja receptivo a 
conexões. 
Caso uma conexão já tenha sido estabelecida e por alguma 
razão o servidor termina a comunicação. 
Assumindo que a conexão foi efetuada com sucesso, 
podemos começar a enviar informação utilizando o 
método Send do nosso socket. O método Send tem 
vários overloads, ou por outras palavras, várias formas de 
interagir com o mesmo. Todos esses overloads tem que tomar 
um array de bytes. Por exemplo, vamos enviar a mensagem: 
"Trabalho da disciplina Sistemas Distribuído". 
try 
{ 
byte[] buffer = new byte[1024]; 
int caracterRecebido = m_socClient.Receive(buffer); 
char[] chars = new char[caracterRecebido]; 
System.Text.Decoder d = 
System.Text.Encoding.UTF8.GetDecoder(); 
int charLen = d.GetChars(buffer, 0, caracterRecebido, chars, 
0); 
4 de 5 
System.String DadosRec = new System.String(chars); 
txtDadosRecebidos.Text = DadosRec; 
} 
catch (SocketException se) 
{ 
MessageBox.Show(se.Message); 
} 
O método Send bloqueia o programa até que a string de dados 
seja enviada, ou um erro seja retornado. Similar ao 
método Send, é o método Receive na classe do socket. Nós 
podemos receber dados, usando o seguinte código: 
byte [] buffer = new byte[1024]; 
int caracterRecebido = m_socClient.Receive (buffer); 
Novamente, o programa fica bloqueado, até que o 
método Receive termine. Isto significa que o programa vai 
ficar bloqueado até que chegue alguma informação, ou 
retornado um erro. 
A Figura 8 representa o sistema cliente na guia dados, onde 
são enviadas e recebidas as mensagens. 
 
B - O SISTEMA SERVIDOR 
a) Cria um socket e atribui um endereço a ele. Este 
endereço deve ser conhecido pelo cliente; 
b) Aguarda a conexão de um cliente; 
c) Aceita a conexão e cria um novo socket para comunicar 
com o cliente; 
d) Recebe a mensagem no novo socket; 
e) Envia mensagem de resposta; 
f) Fecha a conexão com o cliente. 
Quando o cliente faz uma conexão, o servidor precisa aceitar 
e então para que o servidor emita e receba dados daquele 
cliente que está conectado precisa de falar a esse cliente 
através do socket que aceitou a conexão. O código seguinte 
ilustra como o servidor escuta as conexões e aceita: 
try 
{ 
m_socListener = new Socket(AddressFamily.InterNetwork, 
SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 
8221); 
m_socListener.Bind(ipLocal); 
m_socListener.Listen(4); 
m_socListener.BeginAccept(new 
AsyncCallback(OnClientConnect), null); 
Btn_Escutar.Enabled = false; 
} 
catch (SocketException se) 
{ 
MessageBox.Show(se.Message); 
} 
Similar ao cliente é criado um socket de escuta e de liga a um 
IP address local, é passado da porta: 8221. Em seguida é feita 
uma chamada para escutar função. Os 4 são um parâmetro 
que indica a reserva que indica o comprimento máximo da 
fila de conexões pendentes. Em seguida é feita uma chamada 
a BeginAccept que passa lhe uma rechamada do delegado. 
BeginAccept é um método non-blocking que retorne 
imediatamente e quando um cliente fez pedido uma conexão, 
a rotina da rechamada é chamado e você pode aceitar a 
conexão chamando EndAccept. O EndAccept retorna um 
objeto do socket que represente a conexão entrante. O código 
seguinte é delegado para a rechamada: 
try 
{ 
CSocketPacket theSockId = 
(CSocketPacket)asyn.AsyncState; 
int caracterRecebido = 0; 
caracterRecebido = theSockId.thisSocket.EndReceive(asyn); 
char[] chars = new char[caracterRecebido + 1]; 
System.Text.Decoder d = 
System.Text.Encoding.UTF8.GetDecoder(); 
int charLen = d.GetChars(theSockId.dataBuffer, 
0,caracterRecebido, chars, 0); 
System.String DadosRec = new System.String(chars); 
txtDadosRecServer.Text = txtDadosRecServer.Text + 
DadosRec; 
WaitForData(m_socWorker); 
} 
catch (ObjectDisposedException) 
{ 
5 de 5 
System.Diagnostics.Debugger.Log(0, "1", 
"\nOnDataReceived: Socket foi fechado\n"); 
} 
catch (SocketException se) 
{ 
MessageBox.Show(se.Message); 
} 
} 
Aqui nós aceitamos a conexão e a chamada WaitForData que 
chama por sua vez BeginReceive para o m_socWorker. Se 
nós queremos emitir alguns dados ao cliente nós usamos 
o socket do m_socWorker para essa finalidade como este: 
try 
{ 
Object objDadosEnv = txtDadosEnvServer.Text; 
byte[] caracter = 
System.Text.Encoding.ASCII.GetBytes(objDadosEnv.ToStri
ng()); 
m_socWorker.Send(caracter); 
} 
catch (SocketException se) 
{ 
MessageBox.Show(se.Message); 
} 
} 
IV. CONCLUSÃO 
 O mecanismo socket é uma forma simples e eficaz 
de estabelecer conexões e enviar informações. Através de 
um socket podemos realizar várias operações: estabelecer 
conexões entre máquinas, enviar e receber dados, encerrar 
conexões, esperar por conexões em determinada porta. 
O socket é um elemento de software que provê uma interface 
de rede para a aplicação. 
O sistema desenvolvido mostra, através de uma aplicação 
simples, o uso do mecanismosocket para envio de mensagens, 
mas percebe-se que por mais complexa possa ser a aplicação, 
a forma de comunicação se mantêm a mesma; simples. 
Comprovando sua importância para o desenvolvimento de 
aplicações que necessitem de comunicações eficazes e 
eficientes. 
V - REFERÊNCIAS 
ARIEDE, Michel; Sockets: Interney; Disponível em: < 
http://www.interney.net/intranets/?p=9756482> Acesso em: 
18/11/2009 
CORREIA, F;Java Socket. Disponível em: Acesso em 
18/11/2009 
FRANCO, Carla Estefanea de Castro; SILVA, 
Daniel; Aplicação de Socketes em Java para 
monitoramento de processos em estações de trabalho; 
Disponível em: Acesso em: 18/11/2009 
MACORATTI, José Carlos; Usando a comunicação Cliente 
- Servidor com sockets;Disponível em: Acessoem: 
18/11/2009 
SEIXAS, Constantino; UFMG Departamento de 
Engenharia Eletrônica - Comunicação através de sockets 
sobre TCP/IP; Disponível em: Acesso em: 18/11/2009 
STALLINGS, W. Redes e sistemas de comunicação de 
dados: teoria e aplicações corporativas.5. ed. Rio de 
Janeiro: Campus, 2005. xvi, 449 p. 
[1] Daiana Aparecida Bueno, Graduanda da Faculdade 
Cenecista de Varginha – FACECA – 
daianabueno@yahoo.com.br

Continue navegando