Escolar Documentos
Profissional Documentos
Cultura Documentos
Sylverio
Gerenciamento de Projetos, Anlise,
Arquitetura, Orientao a Objetos,
UML, Tecnologias e Programao
Introduo
Primeiramente vamos conceiturar o que socket, ou soquete em portugues. De uma viso geral um soquete pode
ser definido como uma tomada que designa uma cavidade ou regio usada para ligar algum artifcio especfico.
No mundo da computao, um socket o elo de ligao 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 aplicao e a de transporte dentro de uma mquina. Para quem no lembra, ou no sabe, camada
de aplicao e transporte fazem parte do modelo OSI.
Atravs de um socket podemos estabelecer a comunicao entre mquinas possibilitando o envio e recebimento
de dados.
A interface padronizada de sockets surgiu originalmente no sistema operacional Unix BSD (Berkeley Software
Distribution). Tinha a funo de suporte a comunicao em rede. Esta interface a base para a maioria das
interfaces entre protocolos de internet TCP/IP existente.
A identificao de um socket na rede realizada por um IP e um porta. Comumente utiliza-se portas acima de
1000 pois as inferiores so utilizadas pelo sistema operacional. Sua comunicao realizada pelos protocolos UDP
ou TCP. Assim, possvel termos tanto comunicao orientada a conexo (via TCP), quanta no orientada a
conexo (via UDP). O socket abstrai esse conceito, permitindo assim a utilizao de qualquer um dos meios.
No C# para se trabalhar com sockets os recursos enconstram-se no namespace System.Net.Sockets.
Implementando uma aplicao com socket
Este um simples cdigo de uma aplicao Client/Server utilizando socket.
Abaixo o passo a passo de criao da aplicao:
Server App
1. Criar um projeto do tipo WindowsForm com o nome CommunicationSocket.
2. Incluir um boto que ser utilizado para enviar mensagem do servidor para o cliente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using
using
using
using
using
using
System;
System.IO;
System.Net;
System.Net.Sockets;
System.Threading;
System.Windows.Forms;
namespace CommunicationSocket
{
public partial class ServerApp : Form
{
private Socket socket;
private Thread thread;
private NetworkStream networkStream;
private BinaryWriter binaryWriter;
private BinaryReader binaryReader;
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
1/7
02/11/2014
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 }
Client App
1. Criar um projeto do tipo WindowsForm com o nome ClientApp.
2. Incluir boto que ser utilizado para enviar mensagem do cliente para o servidor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using
using
using
using
using
System;
System.IO;
System.Net.Sockets;
System.Threading;
System.Windows.Forms;
namespace ClientApplication
{
public partial class ClientAppForm : Form
{
private NetworkStream networkStream;
private BinaryWriter binaryWriter;
private BinaryReader binaryReader;
private TcpClient tcpClient;
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
2/7
02/11/2014
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 }
Para realizar a comunicao o Servidor utiliza o objeto TcpListener que fica escutando toda requisio no IP
127.0.0.1 porta 2001.
Na aplicao Cliente o objeto TcpClient informado sobre o IP (ou DNS) e porta do servidor que ir se conectar.
Aps esse a realizao toda a comunicao feita por meio de stream atravs do objeto NetworkStream.
Repare que tanto Servidor quanto o Cliente trabalha com processamento em paralelo (Thread) para evitar que a
aplicao fique travada at o trmino do processamento, ou para manter um processamento dedicado e contnuo
que o caso do servidor.
Nesse exemplo utilizei MessageBox para apresentar as mensagens, pois para inseri-las em um TextBox no Form
necessrio utilizar delegates e reflections, seno teremos um erro de cruzamento de Threads (Cross-thread
operation not valid).
Mas isso acho que assunto para o nosso prximo post.
At mais
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
3/7
02/11/2014
Compatilhe!
This entry was posted in Programao, Tecnologia and tagged C#, Framework.NET. Bookmark the permalink.
Danilo says:
07/27/2011 at 8:37 am
Boa Documentao!!!
Ps:Caso no queiram implementar um delegate ou reflection , podem estar colocando no load do form a linha de comando.
CheckForIllegalCrossThreadCalls = false;
Vai funcionar!!
Ol Sylverio!
Primeiramento parabens pela iniciativa.
Sou Engenheiro Eletrnico da velha guarda (tenho 51 anos) tenho um bom conhecimento na area de microprocessadores
ATMEL PIC e venho estudando no peito primeiramente VB.Net e agora C#
Tenho encontrado muita dificuldade em compreender como operar com Sockets EM 2 MICROS DIFERENTES
Com os dois programs (client/server) no mesmo computador a coisa rola bem. Mas como fao para colocar isto
funcionando em computadores diferentes um rodando como server outro como client????
Acho que est me faltando teoria
Se voce puder me ajudar ou pelo menos me indicar o que devo ler, ficarei muito agradecido
Obrigado pela ateno
Ciro Peixoto
Franciscatto says:
03/17/2012 at 2:13 pm
4/7
02/11/2014
No cliente, na linha tcpClient.Connect(127.0.0.1, 2001);, voc tem que colocar o IP da mquina onde o server est em
execuo. Ex 192.168.1.5.
Franciscatto
Ermano says:
09/07/2012 at 11:50 pm
Diego says:
10/06/2012 at 6:46 pm
Boa Note,
Ermano,
Por gentileza, me mostra como fao para receber a mensagem do cliente em uma textBox.
Abraos,
Show Tutorial
Ol Diego,
No testei, mas acredito que seja s sustituir o MessageBox.Show por um controle TextBox.
O que pode acontecer com isso, ter um erro de Thread, teria que ser disparada utilizando delegate para no ter problema.
Abraos
Ol Anderson.
Obrigado. Respondendo sua dvida.
Nunca fiz esse tipo de implementao pela internet. Utilizei socket em alguns projetos comerciais, porem sempre dentro de
uma rede corporativa.
Acredito que funcione, porem verifique as configuraes de firewall e switch que podem bloquear a comunicao.
Boa sorte e se comente aqui depois se descobrir algo novo.
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
5/7
02/11/2014
Abrao
reginaldo says:
09/09/2013 at 12:48 pm
Ol Reginaldo, no. Esse exemplo ele s possui um processo para tratar a requisio.
Para isso voc teria que criar uma Thread para tratar cada requisio de forma separada.
Felipe says:
11/18/2013 at 4:50 pm
Ol Carlos, como modificar esse cdigo para que ele me de uma listagem de arquivos do Servidor para o Cliente para que eu
possa selecionar um arquivo e fazer o download desse arquivo?
Ol Carlos, parabns pela matria. Atravs de sua explicao, criei dois programas que se comunicam entre si . Tenho um
equipamento de leitura de chip que se comunica atravs de IP, o primeiro programa que criei, se conecta a este equipamento
e envia os dados para o segundo programa. At a, tudo ok, porm, quando me conecto com mais de um equipamento
(utilizando um roteador), as informaes chegam ao segundo programa de forma desordenada, ele acaba linkando as
informaes do primeiro e do segundo equipamento e envia os dois ao mesmo tempo, porm no envia de forma completa.
Existe alguma soluo para este problema? No sei se fui muito claro, mas o que acontece que tenho duas mquinas
enviando dados ao mesmo tempo para outra.
Marcos, vamos por partes. Esse exemplo foi simples e didtico. Ele feito de forma sincrona. Para resolver seu problema, vc
precisa criar processos de comunicao de forma assincrona. Ser bem mais complexo.
Tive um projeto similar ao seu no qual cada requisio que chegava ao socket abria uma thread para executar o processo e
liberava o socket para escutar novamenta a proxima requisio. Cada requisio que chegava ao socket ouvinte era
adicionado a uma fila para que executa-las na sequencia certa.
Deu pra perceber que a soluo do seu desenvolvimento ser mais complexa e precisar de outras tcnicas associadas ao
socket para funcionar corretamente.
Espero ter ajudado.
Abrao
Obrigado Carlos. Era o que estava imaginando. Vou realizar pesquisas e verificar uma outra forma de desenvolvimento
trabalhando de forma assincrona. Se tiver alguma matria para indicar ficaria novamente grato. Abraos.
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
6/7
02/11/2014
Muito bom este post, s gostaria de saber qual a diferena entre este exemplo e o da prpria MSDN que parece ser mais
complicada e indica o uso objeto Socket, que usa um objeto AsyncCallback para tornar um procedimento padro ao ser
realizada a conexo
Alisson says:
09/17/2014 at 9:41 pm
Sylverio
Proudly powered by WordPress.
http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/
7/7