Pregunta

Estoy transmitiendo un mensaje simple a . . *. 255 (cambiando a 255 la última parte de mi ip) y estoy tratando de escucharlo. el código no devuelve ningún error pero no recibo nada. En wireshark puedo ver que la transmisión se envía correctamente, pero con un puerto diferente cada vez (no sé si eso es un gran problema). Aquí hay algunas partes de mi código.

Private Sub connect()
    setip()
    btnsend.Enabled = True
    btndisconnect.Enabled = True
    btnconnect.Enabled = False
    receive()
    txtmsg.Enabled = True
End Sub

Sub receive()
    Try
        SocketNO = port
        rClient = New System.Net.Sockets.UdpClient(SocketNO)
        rClient.EnableBroadcast = True
        ThreadReceive = _
           New System.Threading.Thread(AddressOf receivemessages)
        If ThreadReceive.IsAlive = False Then
            ThreadReceive.Start()
        Else
            ThreadReceive.Resume()
        End If
    Catch ex As Exception
        MsgBox("Error")
    End Try
End Sub

Sub receivemessages()
    Dim receiveBytes As Byte() = rClient.Receive(rip)
    Dim BitDet As BitArray
    BitDet = New BitArray(receiveBytes)
    Dim strReturnData As String = _
                System.Text.Encoding.Unicode.GetString(receiveBytes)
    MsgBox(strReturnData.ToString)
End Sub

 Private Sub setip()
    hostname = System.Net.Dns.GetHostName
    myip = IPAddress.Parse(System.Net.Dns.GetHostEntry(hostname).AddressList(1).ToString)
    ipsplit = myip.ToString.Split(".".ToCharArray())
    ipsplit(3) = 255
    broadcastip = IPAddress.Parse(ipsplit(0) & "." & ipsplit(1) & "." + ipsplit(2) + "." + ipsplit(3))
    iep = New IPEndPoint(broadcastip, port)

End Sub

Sub sendmsg()
    Dim msg As Byte()
    MsgBox(myip.ToString)
    sclient = New UdpClient
    sclient.EnableBroadcast = True
    msg = Encoding.ASCII.GetBytes(txtmsg.Text)
    sclient.Send(msg, msg.Length, iep)
    sclient.Close()
    txtmsg.Clear()
End Sub
¿Fue útil?

Solución

Este artículo parece estar haciendo casi exactamente lo que usted ' estoy intentando hacerlo y lo explica bastante bien con muchos comentarios en el código.

Otros consejos

Para escuchar un puerto UDP debe vincular el puerto. Aquí hay un código de C # que uso. Se utiliza un hilo de recepción que sondea el socket de los mensajes.

Socket soUdp_msg = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
IPEndPoint localIpEndPoint_msg = new IPEndPoint(IPAddress.Any, UdpPort_msg);
soUdp_msg.Bind(localIpEndPoint_msg);

Luego en mi hilo de recepción

 byte[] received_s = new byte[2048];
 IPEndPoint tmpIpEndPoint = new IPEndPoint(IPAddress.Any, UdpPort_msg);
 EndPoint remoteEP = (tmpIpEndPoint);

 while (soUdp_msg.Poll(0, SelectMode.SelectRead))
 {

    int sz = soUdp_msg.ReceiveFrom(received_s, ref remoteEP);
    tep = (IPEndPoint)remoteEP;

    // do some work
 }

 Thread.Sleep(50); // sleep so receive thread does not dominate computer
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top