Você está na página 1de 19

(http://www.professorbaruffi.com.

br)

Conectando softwares via rede


(WINSOCK)
Delphi
(http://www.professorbaruffi.com.br/category/programacao/delphi/)
Programao (http://www.professorbaruffi.com.br/category/programacao/)
Bruno Baruffi Esteves (http://www.professorbaruffi.com.br/author/baruffi/)
6 de dezembro de 2013, 3 anos ago
0 (http://www.professorbaruffi.com.br/2013/12/06/conectando-softwaresvia-rede-winsock/#comments)
0 328

Bom seguindo nossas postagens sobre programao, o novo


tpico que abordaremos sobre como conectar seus
programas entre eles, por meio de rede ou internet.
Programas como o MSN, Skype e mIRC utilizam este mtodo
para comunicar um ao outro.
Abordaremos um dos mtodos que mais so utilizados, o
famoso SOCKET.
Socket uma API (Interface de programao de aplicativo), ou
seja, uma espcie de biblioteca, que contem todas as funes e
funcionalidades para uma conexo entre maquinas.
A tcnica de conexo utilizada a Cliente Servidor, ou seja,
conexes so feitas por base de um cliente que se conecta a
um servidor. Um cliente pode se conectar a apenas um
servidor porem, um servidor pode possuir varias conexes de
clientes diferentes.
Segue a figura abaixo.

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d0.jpg)
Como podemos ver na figura acima, para um cliente
comunicar-se com outro, necessrio que se passe pelo
servidor.
Bom como podemos ver, devemos possuir ento pelo menos
computadores, um com o programa cliente, e o outro com o
programa servidor.
Um exemplo disso um jogo em LAN, onde um dos jogadores
cria uma sala (servidor), e todos os outros jogadores se
conectam ao jogador que criou a sala (clientes). Uma coisa
importante a salientar que o servidor tambm joga logo, o
servidor tambm pode ser um cliente.
Bom, vamos por a mo na massa. A linguagem que escolhi para
nossa demonstrao foi o Borland Delphi 7 que, ao meu ver, a
mais fcil de se utilizar os SOCKS.
Iniciando o programa.
Para iniciarmos nosso exemplo, devemos adicionar a API
WINSOCK, que a verso do Windows de nossa API. Para isso
siga os passos abaixo.
Aps inicializar o Deplhi, va na guia Component. No menu
suspenso clique em install Packages.
Na janela que se segue, clique em ADD. Como na figura
abaixo.

(http://www.professorbaruffi.com.br/wpcontent/uploads/2013/12/d1.jpg)
Ao clicar em ADD Uma janela onde voc deve localizar o
arquivo da API.
O arquivo encontra-se na pasta BIN, que esta dentro da pasta
onde o Delphi 7 esta instalado. Se voc instalou seu Delphi no
local padro, esta pasta esta:

C:Arquivos de programasBorlandDelphi7Bin
Dentro desta pasta esto muitas APIs que podem ser
adicionadas em caso de necessidade, nos estamos procurando
o que vai nos proporcionar os componentes do WINSOCK,
cujo nome :

dclsockets70.bpl
Ao encontrar este arquivo adicione o mesmo, clicando em
Abrir depois em OK.
Aps isso, o componente esta adicionado na nossa toolbox
do Delphi na aba Internet, como na figura abaixo.

(http://www.professorbaruffi.com.br/wpcontent/uploads/2013/12/d2.jpg)
Temos dois novos componentes includos no Delphi:
(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d3.jpg)
ClientSocket: Nosso componente cliente. ele quem faz a
conexao do cliente com o servidor.
(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d4.jpg)
ServerSocket: Nosso componente Servidor. ele que fica
aguardando a conexo do cliente para executar suas funes.
Bom, vamos comear com nosso projeto exemplo.
Cliente

Comearemos pelo cliente.

(http://www.professorbaruffi.com.br/wpcontent/uploads/2013/12/d5.jpg)

Componentes: Propriedade
Edit1: Name=txt_ip
Edit2: Name=txt_porta
Button1: Name=btn_conec ; Caption=Conectar
Button2: Name=btn_desco ; Caption=Desconectar;
Enabled=False
Memo1: Name=caixa_msg
Memo2: Name=caixa_receb
Button3: Name=btn_enviar ; Caption=Enviar
ClientSocket: Name=cliente
Com a tela acima pronta podemos comear a programar os
botes.
Primeiro o boto Conectar:

procedure TForm1.btn_conecClick(Sender: TObject);


begin
cliente.Address:=txt_ip.Text;
cliente.Port := StrToInt(txt_porta.Text);
cliente.Active:=true;
btn_desco.Enabled := True;
btn_conec .Enabled :=false;
caixa_msg.Clear;

caixa_receb.Clear;
end;
Com o cdigo acima, temos vrios comandos que no so
usados normalmente. Falaremos um pouco de nosso
componente de conexo, o cliente.
.Address:Propriedade onde se coloca o IP de nosso
servidor.
.Port:Propriedade onde colocamos a porta que esta
aberta para nossa conexo no servidor.
.Active:Ativa o componente.
Seguindo para o boto de desconectar:

procedure TForm1.btn_descoClick(Sender: TObject);


begin
cliente.Active:=false;
end;
Apenas uma linha que indica que a propriedade Active esta
sendo marcada como false.
Seguindo para o boto de enviar mensagem.

procedure TForm1.btn_enviarClick(Sender: TObject);


begin
cliente.Socket.SendText(caixa_msg.Text);
end;
.Socket.SendText(): Envia uma mensagem de texto atravs da
conexo formada por nosso componente para o servidor. No
nosso caso, Conectado a mensagem inicial.
Basicamente o mesmo comando usado anteriormente.
Por fim temos que fazer com que o cliente fique atendo a
mensagens enviadas do servidor h ele. Para isso, temos que
utilizar a funo do ClientSocket chamada OnRead. Para
acess-la, devemos clicar no nosso ClientSocket

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d3.jpg)
Ao clicar, devemos ir a nosso Object Inspector na parte
esquerda inferior da tela e clicar na aba Events. Dentro da aba
Events devemos encontrar o evento OnRead e clicar nele.
Como mostra a figura abaixo.

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d555.jpg)
Dentro desta funo que se abre para criarmos, fica o cdigo
que executado toda vez que uma nova mensagem de nosso
servidor enviada a este cliente.

procedure TForm1.clienteRead(Sender: TObject; Socket:


TCustomWinSocket);
begin
caixa_receb.Text :=socket.ReceiveText

end;
O nico comando presente nesta funo o caixa_receb.Text
:=socket.ReceiveText
que nos diz que tudo que chegar em nosso cliente deve ser
colocado na caixa de texto.

SERVIDOR
Seguindo para a prxima parte, vamos comear a programar o
Servidor. Lembrando que temos que comear um novo
programa.

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d6.jpg)

Componentes: Propriedade
Edit1: Name=xt_porta
Button1: Name=btn_ati; Caption=Ativar
Button2: Name=btn_des; Caption=Desativar
Memo1: Name=caixa_entrada
Memo2: Name=caixa_msg
Button3: Name=btn_enviar; Caption=Enviar
ServerSocket: Name =servidor
Comeando a programar, vamos partir do boto ATIVAR:

procedure TForm1.btn_atiClick(Sender: TObject);


begin
servidor.port:=StrToInt(txt_porta.text);
servidor.Active:=true;
btn_ati.enabled:=false;
btn_des .enabled:=true;
end;
Nada fora do normal certo, apenas atualizamos o parmetro
.Port, que nada mais faz do que dizer em qual porta do seu
computador o Server vai ficar esperando a conexo. E claro o
parmetro .Active, que ativa nosso componente.

O prximo boto o DESATIVAR.

procedure TForm1.btn_desClick(Sender: TObject);


begin
servidor.Active :=false;
btn_ati.enabled:=true;
btn_des .enabled:=false;
end;
Acho que fica bem visvel o que o nico comando incomum faz,
desativa o componente servidor.
Agora vamos a parte interessante, vamos receber as
mensagens que vm do cliente em nosso servidor.
Para isso precisamos clicar no componente ServerSocket
(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d7.jpg)
Ao clicar, devemos ir a nosso Object Inspector na parte
esquerda inferior da tela e clicar na aba Events. Dentro da aba
Events devemos encontrar o evento OnClientRead e clicar
duas vezes no campo ao lado dele, para que assim possamos
programar neste evento. Como mostra a imagem abaixo:

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d8.jpg)
Esta funo nos auxilia, pois ela quem fica verificando as
conexes, e que executa seu cdigo toda vez que uma nova
mensagem de algum client chega nela. Bom vamos ao cdigo:

procedure TForm1.servidorClientRead(Sender:
TObject;Socket: TCustomWinSocket);
var
cmd : string;
begin
cmd:=socket.ReceiveText;
caixa_entrada.Text := cmd;
end;
Bom, esta funo possui um nico comando normalmente
desconhecido, porem vamos dar uma ateno especial ha ela.
criado uma varivel interna chamada cmd onde gravaremos
tudo que entra na nossa conexo. Em seguida temos o
comando socket.receivetext; que pega o contedo que foi
enviado e coloca na varivel cmd. O comando abaixo apenas
coloca o que foi gravado na varivel cmd na nossa caixa de
texto.
Seguindo nossa linha, falta apenas o envio de mensagens do
servidor para o cliente.
Vamos h programao do boto ENVIAR:

procedure TForm1.btn_enviarClick(Sender: TObject);


begin
servidor.Socket.Connections[0].SendText(caixa_msg.text);
end;
Como voc pode ver no cdigo acima, h uma diferena
razovel entre o cliente e o servidor. O Comando
servidor.Socket.Connections[0].SendText(caixa_msg.text);tem
uma coisa que deve ser levada em considerao que o [0].
Este zero, simboliza o primeiro cliente.
Mas o que isso quer dizer? Lembra no comeo do texto que eu
disse que um servidor se conecta a vrios clientes? Pois bem,
como fazer com que uma mensagem que sai do servidor ir para
apenas o cliente que lhe destinada? Simples, cada cliente ao
se conectar ao servidor ganha um numero, por ordem de
chegada, a partir do zero. Logo se, como no exemplo acima,
voc colocar o zero no nosso comando, ele vai enviar apenas
ao primeiro cliente que se conectou, se for colocado o numero

um, ser enviado apenas ao segundo cliente que se conectou, e


assim por diante.
Veja abaixo o programa funcionando na imagem.

(http://108.179.253.230/~profe847/wpcontent/uploads/2013/12/d9.jpg)
Com os comando que foram apresentados j possvel montar
vrios projetos, espero que seja til. Fica abaixo para download
esse programa que fizemos aqui.
OBS: Chegamos ao final de nossa postagem, como a maioria
deve ter notado, eu no mostrei como fazer para controlar
com mais preciso para quem cada mensagem vai, saber quem
esta conectado quem no esta. Sim, eu no mostrei, pois bem
complicadinho e quero deixar isso para outra postagem em um
futuro prximo.
OBS2: Quando voc rodar o servidor pela primeira vez, se seu
firewall estiver ativado, ele vai questionar voc pedindo
autorizao para abrir uma exceo para este programa. Isso
se deve ao fato de que um firewall ter que vigiar todas as
entradas e sadas de rede do computador, coisa que nosso
programa esta tentando acessar.
OBS3: Caso voc v usar este programa entre dois
computadores pela internet e haja um roteador entre a
maquina que vai ser o servidor e a internet, este roteador deve
possuir tambm uma exceo que deve ser acrescentada
manualmente quando se for utilizar, por meio do gerenciador

do roteador, pois o roteador tambm tem a funo de um


firewall.
OBS4: Caso voc queira testar este programa em sua maquina
sem utilizar uma segunda maquina na rede, voc pode colocar
no cliente o IP 127.0.0.1 que redireciona a conexo para si
mesmo. Assim voc pode rodar o cliente e o servidor na
mesma maquina.
Um grande abrao.
Downoad Programa pronto
(http://www.professorbaruffi.com.br/downloads/winsock.zip)

[DELPHI (http://www.professorbaruffi.com.br/tag/delphi/)], [Programacao

(http://www.professorbaruffi.com.br/tag/programacao/)], [Segurana
(http://www.professorbaruffi.com.br/tag/seguranca/)], [WINSOCK
(http://www.professorbaruffi.com.br/tag/winsock/)]

SHARE THIS ARTICLE

(http://www.facebook.com/sharer.php?
(http://twitter.com/share?
(http://plus.google.com/share?
(http://www.linkedin.com/shareArt

u=http%3A%2F%2Fwww.professorbaruffi.com.br%2F2013%2F12%2F06%2Fconectandotext=Conectando url=http%3A%2F%2Fwww.professorbaruffi.com.br%2F2
mini=true&url=http%3A%2F%2Fwww
softwares-

softwares

softwares-

softwares-

via-

via rede

via-

via-

rede-

(WINSOCK))

rede-

rede-

winsock%2F)

winsock%2F&title=Conectando

winsock%2F)

softwares

via rede
(WINSOCK)&summary=Bom
seguindo
nossas
postagens
sobre
programao,
o novo
tpico
que
abordaremos
sobre
como
conectar
seus

programas
entre
eles,
por
meio de
rede ou
internet.
Programas
como o
MSN,
Skype e
mIRC
utilizam
este
mtodo
para
comunicar
um ao
outro.
Abordaremos
um dos
mtodos
que
mais
so
utilizados,
o)

Palestras sobre o futuro da internet com

Julian Assange e convidados (Parte 5)


(http://www.professorbaruffi.com.br/2013/11/19/palest
sobre-o-futuro-da-internet-com-julianassange-e-convidados-parte-5/)

Virus de pendrive. Como remover e lidar


com eles.
(http://www.professorbaruffi.com.br/2014/01/02/virus
de-pendrive-como-remover-e-lidarcom-eles/)

(http://www.professorbaruffi.com.br/author/baruffi/)

Bruno Baru Esteves


(http://www.professorbaru.com.br/author
(http://www.facebook.com/bruno.baruffi) (mailto:brunobaruffi@gmail.com)
(http://www.professorbaruffi.com.br)

- Professor Tcnico de programao, redes de


computadores, segurana. - Atuando no mercado na rea
de programao como Freelancer.

FACEBOOK COMMENTS

POST A COMMENT

Message..

Name:

Email:

Website:

POST COMMENT.

(http://anuncie.boo
box.com/?
utm_source=SS%20beacon&utm_medium=Display&utm_campaign=SS%20beacon)

44%

Bota GONEW Fnix Ca

R$ 131,68 APROVEITE
50%
Bota Gonew Fenix 2.0

R$ 94,03

APROVEITE

TODOS OS ARTIGOS

Ataque de
negao de
servio
(DoS).
(http://www.professorbaru.com.br/2015/10/16/a
de-

negacaode-servicodos/)

Hackers
(http://www.professorbaruffi.com.br/category/seguranca/hackers/)
Segurana
(http://www.professorbaruffi.com.br/category/seguranca/)
2

Conectando
o C# ao
banco de
dados
Firebird
(http://www.professorbaru.com.br/2015/08/27/co
o-c-aobanco-dedadosrebird-2/)
Programao
(http://www.professorbaruffi.com.br/category/programacao/)
Visual Studio
(http://www.professorbaruffi.com.br/category/programacao/vs/)
1

Verdadeiro
mundo dos
hackers.
(http://www.professorbaru.com.br/2014/03/31/o
verdadeiromundodoshackers/)

Hackers
(http://www.professorbaruffi.com.br/category/seguranca/hackers/)

Segurana
(http://www.professorbaruffi.com.br/category/seguranca/)
1

MAIS COMENTADOS

Hospedagem, o que e
como funciona
(http://www.professorbaru.com.br/2014/03/07/hospedagemo-que-e-e-comofunciona/)

PHP

PHP
(http://www.professorbaruffi.com.br/category/programacao/php/)
Programao
(http://www.professorbaruffi.com.br/category/programacao/)
Redes (http://www.professorbaruffi.com.br/category/redes/)
0

PHP com MySQL


comandos basicos
(http://www.professorbaru.com.br/2014/02/19/phpcom-mysql-comandosbasicos/)
PHP
(http://www.professorbaruffi.com.br/category/programacao/php/)
Programao
(http://www.professorbaruffi.com.br/category/programacao/)
0

Manipulando arquivos
INI
(http://www.professorbaru.com.br/2013/09/11/manipulandoarquivos-ini/)
Programao
(http://www.professorbaruffi.com.br/category/programacao/)
Visual Studio
(http://www.professorbaruffi.com.br/category/programacao/vs/)
0

BITCOINS e as
criptomoedas (Parte 2
Final).
(http://www.professorbaru.com.br/2014/01/13/bitcoinse-as-criptomoedasparte-2-nal/)
Liberdade Expresso
(http://www.professorbaruffi.com.br/category/seguranca/liberdade/)
Segurana
(http://www.professorbaruffi.com.br/category/seguranca/)
0

(http://www.professorbaruffi.com.br)

Bem vindos ao Site do professor Baruffi! Aqui voc encontrara contedo diversificado sobre as reas de
tecnologia! Visite, veja, e deixe seus comentrios.

POSTS RECENTES

POSTS RECENTES
Ataque de negao de servio (DoS). (http://www.professorbaruffi.com.br/2015/10/16/ataque-denegacao-de-servico-dos/)
16 de outubro de 2015

Conectando o C# ao banco de dados Firebird


(http://www.professorbaruffi.com.br/2015/08/27/conectando-o-c-ao-banco-de-dados-firebird-2/)
27 de agosto de 2015

Verdadeiro mundo dos hackers. (http://www.professorbaruffi.com.br/2014/03/31/o-verdadeiro-mundodos-hackers/)


31 de maro de 2014

CATEGORIAS
[ PROGRAMAO (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/PROGRAMACAO/) (7)
[ DELPHI (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/PROGRAMACAO/DELPHI/) (2)
[ PHP (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/PROGRAMACAO/PHP/) (3)
[ VISUAL STUDIO (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/PROGRAMACAO/VS/)
(3)
[ REDES (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/REDES/) (3)
[ SEGURANA (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/SEGURANCA/) (10)
[ HACKERS (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/SEGURANCA/HACKERS/) (2)
[ LIBERDADE EXPRESSO
(HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/SEGURANCA/LIBERDADE/) (7)
[ VIRUS (HTTP://WWW.PROFESSORBARUFFI.COM.BR/CATEGORY/SEGURANCA/VIRUS/) (1)

CONTATO

Nome
Email

Sua Mensagem...

Enviar

Você também pode gostar