Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

anolsi

Enviar Mensagens

Mensagens Recomendadas

jpaulino    106
jpaulino

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Anamotiris    0
Anamotiris

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade