Ir para conteúdo
Entre para seguir isso  
Bogos

Enviar Arquivos usando VB

Recommended Posts

Bogos    0
Bogos

[center:fc67e76399]Winsock</span>.

Vou dar uma pincelada básica sobre o controle:

 

-Para que você possa trabalhar com ele primeiro você terá de carrega-lo através do menu Project->Components.

 

Imagem Postada

Selecionando o Controle Winsock

 

-Agora vamos dar uma abordada sobre as propriedades do controle:

- LocalPort = É a porta que seu computador usará. A porta poderá ter até 4 dígitos numéricos

- RemotePort = É a porta que receberá os dados

- RemoteHostIP = Retorna o endereço IP da máquina remota

- LocalIP = Retorna o IP da máquina local

- LocalHostName = Retorna o nome da máquina local

- BytesReceived = Indica a quantidade de dados recebidos (em bytes)

 

Certo agora temos noções das propriedades mais importantes e como adicionar o controle Winsock no projeto.

 

Vamos começar a montar as aplicações, iniciando pela aplicação Servidor, a que RECEBERÁ os dados.

Crie um novo projeto no VB e no formulário insira um Label, um controle Winsok.

 

Imagem Postada

Layout

 

 

Agora vamos definir algumas variáveis que seram usadas em todo o projeto (variáveis globais) e o código a ser colocado no evento Load do Form.

 

Public caminho As StringDim var_temp As StringDim tamanho As LongPrivate Sub Form_Load()   respondeEnd Sub
A seguir o código da rotina atende chamada no Form_Load.

Para utiliza-lo abra a janela de códigos do projeto e no menu clique em Tools->Add Procedure.

Em Name digite responde, em Type deixe Sub e em Scope deixe Private (somente este formulário poderá "acessar" a rotina).

A

Dê OK e na janela de código basta copiar o código abaixo:

 

Private Sub responde()On Error GoTo errome.winsock1.Closeme.winsock1.LocalPort = "3232"me.winsock1.Listenlabel1.Caption = " Servidor ON na porta : 3232"Exit Suberro:  label1.Caption = "Erro - " & Err.Description & "End Sub
No código acima nós tratamos qualquer possibilidade de erro, em seguida fechamos qualquer tipo de conexão do Winsock para que ele fique livre para ser utilizado. Depois indicamos a porta para que ele "escute", no caso 3232, logo após colocamos o componente para "escutar" através do comando Listen.

 

Agora copie o código abaixo no projeto (cuidado para não "ferir" os códigos já prontos)

 

Private Sub winsock1.DataArrival(ByVal bytesTotal As Long)\'recebemos os dados enviados e efetuamos o reconhecimento dos mesmosDim dados_recebidos As String\'armazenos os dados na string (dados_recebidos)Me.winsock1.GetData dados_recebidos\'lembre-se que enviamos do cliente : "arquivo|" & Me.caminho_remoto & "|" & tamanho_arquivo\'vamos destrinchar os dados enviados para efetuar o reconhecimentoIf Mid(dados_recebidos, 1, 7) = "arquivo" Then    \'se o padrão esta coincidindo como esperado continuamos    dados_recebidos = Mid(dados_recebidos, 9, Len(dados_recebidos) - 7)    For i = 1 To Len(dados_recebidos)        If Mid(dados_recebidos, 1, 1) <> "|" Then            \'concatemos o caminho até encontrar o caractere "|"            Me.caminho = Me.caminho + Mid(dados_recebidos, 1, 1)        ElseIf Mid(dados_recebidos, 1, 1) = "|" Then            \' encontramos "|" , saimos do laço                dados_recebidos = Mid(dados_recebidos, 2, Len(dados_recebidos) - 1)            Exit For        End If        \'concatenamos a cadeia e excluindo o caractere armazenado        dados_recebidos = Mid(dados_recebidos, 2, Len(dados_recebidos) - 1)    Next    \'o resto da cadeia é o tamanho do arquivo    tamanho_arquivo = Val(dados_recebidos)\'INFORMAMOS OS VALORES AO CLIENTEMe.winsock1.SendData "msg_requisicao_aceita"\'\'a varivael \'arquivo_temporario\' guarda o conteudo do arquivoarquivo_temporario = ""Else    \'se o tamanho do arquivo temporario é diferente do arquivo enviado    If Len(arquivo_temporario) <> tamanho_arquivo Then arquivo_temporario = arquivo_temporario + dados_recebidos    \'quando o tamanho coincide então o arquivo chegou completo    If Len(arquivo_temporario) = tamanho_arquivo Then        \'abrirmos um arquivo binário para escrever o conteúdo dos dados        Open Me.caminho For Binary As #1        Put #1, 1, arquivo_temporario        \'fechamos o arquivo        Close #1        Me.caminho = ""        \'informamos ao cliente que o arquivo chegou completo        Me.winsock1.SendData "msg_arquivo_recebido"    End IfEnd IfEnd Sub
As devidas explicações foram colocadas ao meio do código em forma de comentário para que não dê problema ao compilar o projeto e para que você possa estudar o código dentro do VB mesmo.

 

Temos o servidor pronto!

Agora vamos criar nosso cliente, que irá enviar os arquivos.

 

Crie um projeto e deixe-o conforme figura abaixo:

 

Imagem Postada

Layout Cliente

 

 

Agora mude a propriedade name do Winsock para ws_cliente, o label para lbl_estado_winsock o botão enviar para cmd_enviar, o botão conectar para cmd_conectar, o textbox do IP para txt_ip, o textbox de destino para txt_ruta e o textbox do arquivo à enviar para txtarqselecionado.

 

Agora limpe toda a área de código desse formulário e copie o código a seguir:

 

Public conteudo_arquivo As StringDim nome_arquivo As StringDim caminho_remoto As StringDim tamanho_arquivo As LongPrivate Sub cmd_conectar_click()On Error GoTo trataerro\'antes de conectar o winsock deve estar fechadoMe.ws_cliente.Close\'me conecto o PC usando o numero ip a porta definida abaixo o Servidor tem que estar rodando e escutando na porta definidaMe.ws_cliente.Connect Me.txt_ip, "65355"\'habilita o frame com a opçõesMe.Frame1.Enabled = TrueExit Subtrataerro:    lbl_estado_winsock = lbl_estado_winsock & Err.Number & " - " & Err.DescriptionEnd Sub
Na rotina acima nós definimos as variáveis e também o código do evento Click do botão Conectar que usa do método Connect para efetuar a conexão com o IP e porta que informamos anteriormente.

 

As rotinas mais importantes do projeto cliente são exibidas abaixo:

- Enviar arquivo - código do evento Click do botão Enviar

- Tratamento dos dados - código que trata os dados que vão do servidor para o cliente

 

Private Sub cmd_enviar_Click()  caminho_remoto = txt_ruta.Text + nome_arquivo  \'enviamos os dados para pode mandar o arquivo corretamente informando o caminho e o nome  Me.ws_cliente.SendData "arquivo|" & caminho_remoto & "|" & tamanho_arquivoEnd Sub Private Sub ws_cliente_DataArrival(ByVal bytesTotal As Long)\'cada vez que se recebe algo armazenamos na variavelDim dado_recebido As StringMe.ws_cliente.GetData dado_recebidoSelect Case dado_recebido    Case Is = "msg_requisicao_aceita":        \'se o servidor recebeu a requisição e a aceitou        \'enviamos o conteudo do arquivo lido        ws_cliente.SendData conteudo_arquivo    Case Is = "msg_arquivo_recebido":        \'se o envio foi completo enviamos uma mensagem de informação        \'MsgBox ("Arquivo envíado corretamente"), vbInformation        lbl_estado_winsock = lbl_estado_winsock & " - Arquivo Enviado"        \'ws_cliente.CloseEnd SelectEnd Sub
Agora é só botar pra rodar, testar e ser feliz =)

 

Espero que não tenham problemas com os códigos/explicação, mas qualquer dúvida só postar http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/wink.gif

 

 

Cya,

Bogos

<span style=\'color:blue\'>

Net Fox!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Boleta    1
Boleta

Excelente Bogos!

 

Código fonte muito bem feito! Parabéns!

O Sistema de envio do conteúdo está ótimo!

 

Ótimos conceitos de Winsock!

 

Abraços,

//Bol~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

^^ValeusDeu um bom trabalho mas acho que valeu a pena xDSempre que for possível eu vou criar mais tópicos como esse=DCya,Bogos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Muito legal, mas parece estar faltando segmentos do código.Não consegui visualizar a parte em que o arquivo é lido, e a variável conteudo_arquivo só é declarada e enviada vazia?Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Convidado Bush   
Convidado Bush

Pelo o que os outros estao falando parece ser muito bom =DMas espero nunca precisar fazer um lances desse.Pq nao entendi puffas.Sou iniciante ainda ¬¬"Mas vlw pelo Topico xD

Compartilhar este post


Link para o post
Compartilhar em outros sites
flipagenor    0
flipagenor

iBogos, ta excelente, mas voce deveria falar para as pessoas colocarem tipo o código responde() em um módulo, fica mais fácil arrumar (mas o código esta muito bom).@~Zero:Também achei o evento eniar ta confuso, mas eu entendi um pouco, ele usou a tag para formar o caminho. É isso né iBogos?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Certo, mas só enviando o caminho não tem como o receptor obter o conteúdo do arquivo. A variável conteudo_arquivo é declarada e enviada pelo Winsock sem valor algum. Acredito que esteja faltando partes do código ou que ele esteja incompleto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

realmente está mesmovou dar uma estudada e arrumar:Ssorry hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Nada, o que tem desenvolvido no tópico é de grande valia. Muitos usuários podem aprender bastante coisa aqui, mesmo enquanto incompleto!Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

@Zero

 

seu alerta foi bem persepicáz, pois aquele textbox Destino não está servindo pra nada, porém se eu não me engano (não tenho + o projeto e eu ainda não coloquei esse pra compila :S) o servidor (receptor) irá colocar o arquivo na pasta atual do projeto. O código funciona, porém não como devia hehe

Espero que tenho consegui passar algum conceito sobre Winsock de forma clara =)

E valeu ae pelo toque, passou batido http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/ohmy.gif

 

Cya,

Bogos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Com certeza conseguiu. Se tiver problemas com o código eu desenvolvo a parte que falta, porém acho que só poderei faze-lo no fim de semana, pois estou em semana de provas!Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Hypnotized    0
Hypnotized

Eu fiz tudo certinho aqui, porém não consigo conectar.

Ele me retorna o erro 6 (Connecting) mas o certo seria 7 (Connected).

 

Ps: Tem muito erro no script, eu fiz tudo certinho, mas deu erro.

Mas eu tava vendo, dava pra ter a opção de procurar o arquivo, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Convidado MarioToledo   
Convidado MarioToledo

Aew,boa, com esse projeto, eu posso fazer milicoisas agora

 

ohohohohoho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×