Jump to content

winsock no Visual Basic 2005 express


NelsonBN
 Share

Recommended Posts

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???

Link to comment
Share on other 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!!!

Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Link to comment
Share on other 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???

Link to comment
Share on other 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

Link to comment
Share on other 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?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.