• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NelsonBN

winsock no Visual Basic 2005 express

10 mensagens neste tópico

Primeiro queria pedir desculpa em ter colocado o meu tópico aqui... eu queria colocar em [VB]-Dúvidas e Ajudas mas la não tinha a versão do vb que eu uso....

a minha duvida é o seguinte... estou a usar o Visual Basic 2005 express e queria fazer um programa que envie informação para um outro programa que está em outro computador... ou seja, fazer um programa servidor(recebe informação) e um programa cliente (envia informação)... estive a pesquisar sobre isso e pelo que encontrei, a melhor maneira de fazer isso é com um componente chamo winsock, o problema é que eu não encontro esse componente no meu vb, alguém me pode ajudar... será que a versão que eu uso do vb não permite fazer isso?? existe alguma alternativa?? devo usar outra versão???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em tempos estive com uma cena dessas quase feita...aliás. entre 3 máquinas já se conseguia manter uma conversação...a ideia era quase fazer um messenger...com bonequinhos com estados e essas tretas todas, ip's dinâmicos, mensagens offline, etc , num ambiente com 200 utilizadores e controlado por uma BD Oracle.... mas entretanto fiquei sem ajuda...e sozinho...não tive tempo para voltar a pegar.....

eu desenvolvi com o com sockets

Este exemplo é feito em TCP, mas tb podes usar UDP.... a única diferença é que, se não estou errado..o UDP não dá feedback.. é só de difusão... com o tcp...se a coisa correr mal...ficas a saber do lado de cá ! (explicação minimalista!)

Imports System.Net.Sockets

Outra coisa que também é importante...é correres isto em thread's... para o listener estar sempre à escuta...

Ex:

Criação do Servidor (Receptor)

Criação da thread que apela à criação do listener


      Public Sub start_server_receive()
        Try
            t = New System.Threading.Thread(AddressOf Me.StartListener)
            t.Name = "listener"
            t.Start()
        Catch
            Exit Sub
        End Try
    End Sub

Criação do Servidor:

    Private Sub StartListener()
        Try
            tcplistener = New TcpListener(5000)
            tcplistener.Start()
        Catch ex As Exception
            'tratamento da excepção
        End Try
        Do
            Try
                Dim tcp_client As System.Net.Sockets.TcpClient = tcplistener.AcceptTcpClient()
                Dim networkStream As System.Net.Sockets.NetworkStream = tcp_client.GetStream()
                Dim bytes(tcp_client.ReceiveBufferSize) As Byte
                networkStream.Read(bytes, 0, CInt(tcp_client.ReceiveBufferSize))
                Dim clientdata As String = Encoding.ASCII.GetString(bytes)
                '^Recebe uma string (por exemplo um comando)
                'aqui faz-se o tratamento da string
                'Se for para receber ficheiros por o tratamento e feito de maneira diferente


            Catch ex As Exception
                Exit Do
            End Try
        Loop
    End Sub

Ok... agora já tens uma máquina à escuta na porta - podes confirmar em linha de comandos: netstat -a

...quanto ao cliente...só é criado quando queres enviar:


    Public Function Send_Stream_Text( ByVal f As String) As Boolean
     Dim tcpClient As New TcpClient
        Try
            tcpClient.Connect(ipdestino,porta)
        Catch ex As Exception
            MsgBox("Erro ao ligar! " & vbNewLine & ex.Message)
            Exit Sub
        End Try
        Dim networkStream As Net.Sockets.NetworkStream = tcpclient.GetStream()
        If networkStream.CanWrite And networkStream.CanRead Then
            Try
                Dim sendBytes As [byte]() = Encoding.ASCII.GetBytes(f)
                tcpclient.SendBufferSize = sendBytes.Length
                networkStream.Write(sendBytes, 0, sendBytes.Length)
                Return True
            Catch ex As Exception
                Return False
            End Try
        End If
    End Function

Penso que seria isto que querias... isto é do mais simples que me parece poder ser feito... depois é só uma questão de ajeitares a teu gosto..e adicionares a complexidade que precisares.

O sistema de envio de ficheiros...nunca chegamos a concluir...porque perdíamos aí uns bytes pelo caminho... mas esteve quase lá...talvez um dia este projecto ainda seja retomado!!

Qq dúvida... "apita"

Encontei ainda este expleo..pode ser que ajude: http://www.freevbcode.com/ShowCode.asp?ID=7557

PS. código escrito com uma grande ajuda do meu grande amigo Ricardo Neves!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem eu e o um amigo meu encontramos um winsock que aparentemente funciona no Visual Basic 2005 express. É o Winsock Orcas.dll, só tive de o adicionar ao meu vb e pronto...

Já consigo fazer conexão entre servidor e cliente.

Mas quando tentei enviar uma simples mensagem do cliente para o servidor, nada feito. O meu amigo disse que antes tinha dar dar permissão ao cliente. tentei fazer e nada...

para aceitar a conexão do cliente usei o seguinte (este código é no servidor):

Private Sub winsock1_ConnectionRequest(ByVal sender As Object, ByVal e As Winsock_Orcas.WinsockConnectionRequestEventArgs) Handles winsock1.ConnectionRequest
     winsock1.Accept(e.Client)
End Sub

o evento que serve para receber mensagens, não é winsock1_DataArrival??

e no cliente para mandar mensagens?? não é winsock1.Send("teste")??

alguém me sabe responder???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim é no data arrival, defines o q vem numa variavel e mostras a variavel.

'isto provem de um código que eu tenho de vb 6 que faz de chat.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim DATA As String
Winsock1.GetData DATA
Text1.Text = Text1.Text & vbCrLf & DATA
End Sub

depois s quiseres deixo-t todo o código referente ao winsock

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem.... pessoal obrigado pela ajuda que me deram... já resolvi o meu problema....

instalei o vb 2008 express e utilizei a dll "Winsock Orcas.dl". Foi só adicionar essa dll ao meu projecto e usar normalmente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu criei um mini chat mas so consegue aceder um cliente :P

como resolvo?

Winsock Orcas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma pergunta muitooooo querida............ porque raio usas winsocks? o.0

okok nevermind xD

usa tcpclient muito mais fácil :|

ai vou eu fazer outro tutorial xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite,

ando aqui a fazer um programa cliente- servidor para troca de informaçao entre si. Com exemplos da net consegui ver o ambiente trabalho do servidor.

Depois de alguns testes reparei que não consigo aceder externamente com o programa cliente. Coloquei o ip externo e no router tenho a porta aberta mas da sempre erro ns ligaçao. Agora se for com ipinterno da mesma rede funciona

Exprimentei tambem o codigo do.jose lopes postou e tenho o mesmo problema.

Alguem sabe porque?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora