Meu Primeiro Client Server

Sprit
Por Sprit
em C# e Visual Basic

Sprit

Serviços Prestados ao XTibia
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 29/12/06Posts: 111Char no Tibia: King Unagi

Primeiramente, gostaria de agradecer ao Coord. De Conteúdo Eigenlieb, isto me anima a escrever tutos e ajudar a comunidade, e também ao Nostradamus, que adotou a ideia do manager que eu iniciei o projeto, e também se mostrou bastante interessado.

 

Vlw Mesmo!

 

 

 

Vamos Começar.

 

Primeiro precisamos entender o conceito de client-server que na verdade é bem simples, vamos tomar um exemplo prático, VOCÊ!

 

Digamos que VOCÊ (Client) chega para seu Pai (PS: com 17 Anos de Idade) e pergunta:

 

- Pai, deixa eu dirigir o carro?

 

O Pai (Server), responde,

 

- Nãooo!

 

Com este exemplo ficou bem facil entender como funciona, o client pergunta e o servidor responde a solicitação (pergunta) do Client.

 

Agora vem , Pow! Sprit não parece ser taum simples fazer um programa que responda as solicitações de outro programa. Pois é porém as solicitações são pré definidas no client, e as respostas no servidor.

Ficou Mais Facil agora neh!

 

Bom, Vamos para o VB

 

Abra o Visual Basic

 

Vamos começar o Servidor (o Cara que atende as solciitações)

 

1º Crie um novo Projeto Standard Exe

 

2º Adicione um controle Winsock no Formulario, (Para Adicionar, Click com o Botão direito do mouse na ToolBar, normalmente a esqueda, e selecione components, depois localize:

Microsoft Winsock Control 6.0 , selecione e aperte OK, note que apareceu 2 computadorezinhos na toolbar, adicione ele ao Formulario

 

Pronto, com isto ja podemos fazer conexoes com outros Computadores Via TCP/IP ou UDP

 

Altere as seguintes propriedades do Winsock

 

Name: wsSock ‘Nome do Objeto

Index: 0 ‘Numero do Indice (isso serve para podermos ter varios controles iguais no form e usalos como uma Array)

LocalPort: 1515 ‘porta que vamos conectar nosso client

 

 

3º Adicione um Text Box e altere as propriedades

 

Name: txtLog

MultiLine: True

ScroolBar: Vertical

Top: 120

Left: 120

Width: 4455

Height : 2895

 

Este vai servir para mostrarmos o que o server está recebendo e o que esta acontecendo.

 

Bom Vamos para o Codigo do Servidor

 

Dim n_Connection As Integer
Private Sub Form_Load()
'ADICIONA NO LOG
txtLog.Text = Now & " >  Iniciando..."

   'VERIFICA SE O SOCKET JA ESTA ABERTO
   'AGUARDANDO NA PORTA ESPECIFICADA (1515)
   If wsSock(0).State <> sckClosed Then
       wsSock(0).Close
   End If
   
   'SETA O PROTOCOLO
   wsSock(0).Protocol = sckTCPProtocol
   
   'COMEÇA A AGUARDAR UMA CONEXAO
   wsSock(0).Listen
   
   'MOSTRA NO TEXT QUE O SERVER FOI INICIADO
   'VBCRLF: Serve para ir para outra linha no textbox
   txtLog.Text = txtLog.Text & vbCrLf & Now & " >  Server Iniciado, Porta: " & wsSock(0).LocalPort

End Sub

Private Sub Form_Unload(Cancel As Integer)

   'FECHA TODOS OS SOCKETS ABERTOS E FECHA O FORM
   For i = wsSock.UBound To wsSock.LBound Step -1
       wsSock(i).Close
   Next i
   
   
End Sub

Private Sub wsSock_Close(Index As Integer)
'REMOVE UMA CONEXAO E FECHA O SOCKET

   'TIRA UMA CONEXAO DO TOTAL
   n_Connection = n_Connection - 1
   
   'MOSTRA NO LOG
   txtLog.Text = txtLog.Text & vbCrLf & Now & " >  Conexao Fechada P/: " & wsSock(Index).RemoteHostIP
   
   'DESTOY O SOCKET QUE NAO VAI MAIS SER USADO
   Unload wsSock(Index)
   

End Sub

Private Sub wsSock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
   
   'ESSE EVENTO É DISPARADO QUANDO ALGUEM TENTA CONECTAR


'ADICIONA +1 NA CONEXAO PARA SABERMOS QUANTAS PESSOAS TEMOS CONECTADA
n_Connection = n_Connection + 1

'CRIA UM NOVO SOCKET PARA ACEITAR O USUARIO
Load wsSock(n_Connection)

'ACEITA A CONEXAO COM USUARIO
wsSock(n_Connection).Accept requestID

'ADICIONA NO TEXTO
txtLog.Text = txtLog.Text & vbCrLf & Now & " > Conexão Aceita P/:" & wsSock(Index).RemoteHostIP

End Sub

Private Sub wsSock_DataArrival(Index As Integer, ByVal bytesTotal As Long)

   'ESSE EVENTO ACONTECE QUANDO O CLIENT ENVIA ALGUMA COISA PRO SERVER
   
   
'CASO DE ERRO ENVIA UMA MENSAGEM PRE DEFINIDA
On Error GoTo Handler

   
'CRIAMOS A VARIAVEL QUE VAI RECEBER OS DADOS
Dim RData

   'RECEBE OS DADOS DO CLIENT
   wsSock(Index).GetData RData, vbByte
   
   'DESCOBRE O QUE FOI ENVIADO
   'A FUNÇÃO SPLIT VAI QUEBRAR A VARIAVEL TODA VEZ QUE ENCONTRAR #
   'EX
   'RDATA=TESTE#123#ABC
   'DEPOIS DO SPLIT VAMOS FAZER O SEGUINTE
   'RData = Split(RData, "#")
   'FICARIA
   'RDATA(0)=TESTE
   'RDATA(1)=123
   'RDATA(2)=ABC
   
   RData = Split(RData, "#")

   
       Select Case CStr(RData(0))
           Case "&H1" 'SE RECEBER H1 DO CLIENT (ENVIA TESTE)
               
               wsSock(Index).SendData "MSG#TESTE"
               'ADICIONA NO TEXTO
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Recebido &H1 de: " & wsSock(Index).RemoteHostIP
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Enviando MSG#TESTE P/: " & wsSock(Index).RemoteHostIP
               
           Case "&H2" 'SE RECEBER H2, ENVIA 123 PRO CLIENT
           
               wsSock(Index).SendData "MSG#123"
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Recebido &H2 de: " & wsSock(Index).RemoteHostIP
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Enviando MSG#123 P/: " & wsSock(Index).RemoteHostIP
           Case Else 'SE NAO RECEBER NENHUM NEM OUTRO, ENVIA COMANDO INEXISTENTE
               wsSock(Index).SendData "MSG#NAO CONHEÇO ESTE COMANDO!"
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Recebido " & RData(0) & " de: " & wsSock(Index).RemoteHostIP
               txtLog.Text = txtLog.Text & vbCrLf & Now & " > Enviando MSG#NAO CONHEÇO ESTE COMANDO! P/: " & wsSock(Index).RemoteHostIP
       End Select
               
       Exit Sub
       
Handler:

     txtLog.Text = txtLog.Text & vbCrLf & Now & " > Recebido " & RData(0) & " de: " & wsSock(Index).RemoteHostIP
   
End Sub

 

E assim temos um programa servidor, aguardando solicitação de um client.

Nada muito complexo, so precisa ser lido com muita atenção, é usado também criptografia, na troca dos dados,

Tentem usar o exemplo de criptografia que eu ja postei, pode ser bem util para vocês começarem a usar aplicações client-server

 

 

Vamos Para o client, o client é bem mais simples.

Bom o Client eu nao comentei o código, para que vocês fuçem e se divirtam, existe alguns bugs que eu deixei de proposito, para ajudar no aprendizado por enquanto é isso ai.

 

Private Sub cmdConnect_Click()
Timer1.Enabled = False

If wsSock.State <> sckClosed Then
   wsSock.Close
End If


wsSock.Connect txtIP, txtPort

Do While wsSock.State = sckConnecting
DoEvents
lblReg.Caption = "Conectando..."
Loop

Select Case wsSock.State
   Case sckConnected
       lblReg.Caption = "Conectado!"
   Case sckError
       lblReg.Caption = "Erro!"
   Case Else
       lblReg.Caption = "Disconectado"
End Select

cmdConnect.Enabled = False
Timer1.Enabled = True
End Sub

Private Sub cmdH1_Click()
If wsSock.State = sckConnected Then
   wsSock.SendData "&H1"
End If

End Sub

Private Sub cmdH2_Click()

If wsSock.State = sckConnected Then
   wsSock.SendData "&H2"
End If

End Sub

Private Sub Form_Unload(Cancel As Integer)
wsSock.Close
End Sub

Private Sub Timer1_Timer()

If wsSock.State = sckConnected Then
   cmdConnect.Enabled = False
Else
   cmdConnect.Enabled = True
End If

Select Case wsSock.State
   Case sckConnected
       lblReg.Caption = "Conectado!"
   Case sckError
       lblReg.Caption = "Erro!"
   Case Else
       lblReg.Caption = "Disconectado"
End Select

End Sub

Private Sub wsSock_DataArrival(ByVal bytesTotal As Long)
Dim rDATA

   wsSock.GetData rDATA, vbString
   
       rDATA = Split(rDATA, "#")
       
           If rDATA(0) = "MSG" Then
               MsgBox "Recebido: " & rDATA(1), vbInformation
           End If
                       
End Sub

A Tela do Client é igual a ésta:

 

untitledqt3.jpg

 

Espero que gostem, em breve eu trago mais alguma coisa, quem quizer o codigo fonte me manda PM com o Email, que eu envio o codigo fonte do client e do server.

 

Vlws

 

By Sprit


"Se tem jeito fazemos, se não tem jeito, inventamos um jeito!! (By Drak)"


Felipe Moraes

Java Developer
avatar
Grão-Duque
Grão-Duque

INFOS

Grupo: Grão-DuqueRegistrado: 02/10/06Posts: 3285Gênero: Masculino
Abra o Visual Basic

onde eu arrumo isso? sera q dava pra vc postar ai?eu ficaria grato...

~A nossa maior glória não reside no fato de nunca cairmos, mas sim em levantarmo-nos sempre depois de cada queda.~

 

 

 

 

Clique aqui para ver meus tutoriais !

 

 

 

Gamertag: cpmoraes

 

 

Paper Boy

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/07Posts: 6

bem lgl ;) vlw.

 

 

<~>Paper Boy<~>

Nostradamus

Serviços Prestados ao XTibia.com
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 10/06/06Posts: 338Char no Tibia: Setyte Berseker

Sprit, muito bom.

Já vi um projeto que uns caras fizeram ao qual dava para andar falar e tudo mais, e foi feito em VB também.

[twitter]ThomazYuji[/twitter]

Ksz

avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 08/08/06Posts: 105Char no Tibia: Não Tenho

An, não intendi pra que serve ;_;

Little Kids don't cry...

13 aninhos e já é um chorão.

TioRick

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 19/12/07Posts: 7
onde eu arrumo isso? sera q dava pra vc postar ai?eu ficaria grato...

 

 

É só você baixar o "Visual Studio 2008" e se divertir ^^

No caso, ele usou VB 6, mas baixa o studio 2008 que é mais atualizado.

A propósito, muito bom o tutorial, se juntar isso com sql dá pra fazer algo bem legal ;)

 

MEU NOVO PERFIL AQUI NO XTIBIA É "RicardoIanelli", qualquer coisa é só mandar PM! Abraços a todos!

dark rogue

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/01/06Posts: 56

Se não estou enganado, esses são os principios básicos de alguns virus, na qual o cliente envia uma solitação e o server(instalado na "vitima") responde, enviando certas informações.

 

LimeWire

Junin x)
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/09Posts: 29
An, não intendi pra que serve ;_;

 

Isso serve para as pessoas entrarem no seu server sem Ip-Changer.

 

~~ Aprovadoo :button_ok:

 

Coliseum Project...

Se inscrevam!

Joinu

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 04/08/08Posts: 213

Se não estou enganado, esses são os principios básicos de alguns virus, na qual o cliente envia uma solitação e o server(instalado na "vitima") responde, enviando certas informações.

Bem vc se enganou, na verdade esse eh o principio basico de todas a comunicação existente entre a internet um servidor fica na escuta e um cliente faz o pedido de conexao infelizmente tb eh assim que funciona os backdoors

Bem ficou legal o tuto mas poderia explicar um pouco mais a alguns anos atraz eu postei na net uma apostila que explicava sobre isso tb e se nao me engano eu expliquei para que serve cada uma das funcoes do winsock tentem procurar por winsock.doc by join se ainda existir esta por ai

abraços!!!

Kude Ampola

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 25/01/07Posts: 65

Aiaiai querendoo paga de entendido, asaiojsjsa.

Alem de reviver um topico, reportado!

Falso virus em c++, Ja vem pronto apenas baixar e zuar!!

Download :Aqui

Joinu

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 04/08/08Posts: 213

Bem se vc nao reparou o ultimo post antes do meu foi a um mes atraz....

mas tb nao quero ficar arrumando confusao.... abraços!

DaNDaNrOxX

oi mosso
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 18/01/08Posts: 1455Char no Tibia: Saint Claire

Kude, quem reviveu o tópico foi o Tio Rick.

Então fica aqui um "puxão de orelha" para todos, evitem postar em tópicos que não recebem comentário por um longo tempo!

-

Provavelmente este código não funciona nas versões de hoje, então vou fechar o tópico.

 

Abraços

 

 

Entrada na equipe: 23/10/2008 Cargo: Estagiário

Promoção: 25/11/2008 Cargo: Moderador

Promoção: 21/10/2009 Cargo: Coordenador

Remoção: 09/05/2010 Motivo: Estudos

Retorno: 15/11/2010 Cargo: Moderador

Remoção: 20/12/2012.