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

anolsi

Enviar Mensagens

6 mensagens neste tópico

Alguém sabe uma maneira de enviar mensagens através de computadores ligados em rede utilizando o VB?  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se quiserem exprimentar este exemplo utilizando sockets podes tentar. Isto enviou-me um amigo à poucas semanas mas sinceramente ainda não experimentei.

Se não funcionar diz-me que eu tento amanhã (em casa não tenho rede).

Imports System.Net
Imports System.Net.Sockets
Imports System.Text.Encoding

Public Class NetworkSockets

      Private Class SocketPacket

            Public thisSocket As Socket
            Public dataBuffer As Byte() = New Byte(1024) {}

  End Class

      Public Class SocketEventArgs

            Public Data As String = String.Empty

            Public Sub New(ByVal newData As String)

                  Me.Data = newData

            End Sub

  End Class


      Private socketListener As Socket
      Private socketWorker As Socket

      Public Event ReceivedData(ByVal sender As Object, ByVal e As SocketEventArgs)


  ''' <summary>
  ''' Start listening on a port for packets coming from either a specific address,
  ''' or any address.
  ''' </summary>
  ''' <param name="portNumber">Port to listen on</param>
  ''' <param name="addressConnect">IP address to connect to (if a specific address 
  ''' is needed), otherwise listen to data from any address.</param>
  Public Sub ListenToPort(ByVal portNumber As Integer, ByVal addressConnect As String)

    Dim addressSource As IPAddress
    If addressConnect.Length > 0 Then
      addressSource = IPAddress.Parse(addressConnect)
    Else
      addressSource = IPAddress.Any
    End If

    socketListener = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim ipLocal As IPEndPoint = New IPEndPoint(addressSource, portNumber)

    Me.socketListener.Bind(ipLocal)

    ' Start 
    Me.socketListener.Listen(1)

    ' Set up a call for the connection
    Me.socketListener.BeginAccept(New AsyncCallback(AddressOf connectCallbackFunction), Nothing)

  End Sub


  ''' <summary>
  ''' Asychronously wait for a connection to occur.  Send an acknowledgement when
  ''' a connection is opened.
  ''' </summary>
  ''' <param name="result"></param>
  Private Sub connectCallbackFunction(ByVal result As IAsyncResult)

    Try

      socketWorker = socketListener.EndAccept(result)

      Me.WaitForData(socketWorker)

      Me.SendData(socketWorker, "Connected")

    Catch oEx As ObjectDisposedException
      Console.WriteLine("The connection has been closed.")

    Catch sEx As SocketException
      Console.WriteLine(sEx.Message)

    End Try

  End Sub

  ''' <summary>
  ''' Send data through the open TCP/IP socket connection.
  ''' </summary>
  ''' <param name="IOsocket">The socket created from the connection callback.</param>
  ''' <param name="messageToSend">Message that you want to send through the socket.</param>
  Public Sub SendData(ByVal IOsocket As Socket, ByVal messageToSend As String)

    Try

      Console.Write("Sending this message: ")
      Console.Write(messageToSend)
      Console.WriteLine("")

      Dim byteData As Byte() = ASCII.GetBytes(messageToSend)

      IOsocket.Send(byteData)

    Catch sEx As SocketException

      Console.WriteLine(sEx.Message)

    End Try

  End Sub

  ''' <summary>
  ''' Asynchronously wait for incoming data on the open socket.  Set up a callback
  ''' to detect received data on the socket.
  ''' </summary>
  ''' <param name="IOsocket">Reference to an open socket.</param>
  Private Sub WaitForData(ByVal IOsocket As Socket)

    Try

      Dim packet As SocketPacket = New SocketPacket

      packet.thisSocket = IOsocket

      ' Set up a call to detect incoming data.
      IOsocket.BeginReceive(packet.dataBuffer, 0, packet.dataBuffer.Length, _
        SocketFlags.None, New AsyncCallback(AddressOf dataReceivedCallbackFunction), packet)

    Catch dataException As SocketException

      Console.WriteLine(dataException.Message)

    End Try

  End Sub

  ''' <summary>
  ''' Callback method to receive data, and raise the ReceivedData event.
  ''' </summary>
  Private Sub dataReceivedCallbackFunction(ByVal result As IAsyncResult)

    Try

      Dim packet As SocketPacket = CType(result.AsyncState, SocketPacket)

      Dim size As Integer = packet.thisSocket.EndReceive(result)

      Dim buffer(size + 1) As Char
      Dim decoder As System.Text.Decoder = System.Text.Encoding.UTF8.GetDecoder()
      Dim numCharacters As Integer = decoder.GetChars(packet.dataBuffer, 0, size, buffer, 0)
      Dim receivedData As String = New String(buffer)

      RaiseEvent ReceivedData(Me, New SocketEventArgs(receivedData))

    Catch ex As ObjectDisposedException

      Console.WriteLine("The connection has been closed.")

    Catch ex As SocketException

      Console.WriteLine(ex.Message)

    End Try

  End Sub

End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consigo utilizar a API do obejcto. Será que não poderias criar um exemplo da utilização? :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa devo ter apagado o email da notificação! São tantos ... :-)

Ainda precisas de ajudas ou já resolveste (com este código ou com outro) ?

Se ainda precisares de ajuda diz qualquer coisa e diz-me também duas coisas:

- Sistema operativo que vai ser utilizado;

- Queres envio de mensagem e recepção do outro lado (tipo hyperterminal) ou envio de mensagem e aparecer apenas do outro lado(tipo msgbox);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que existe um projecto desenvolvido aqui no forum em vb6 que envia messagens apartir do NET SEND...

aplicação já está  feita.

fica bem

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