【发布时间】:2014-10-07 06:20:20
【问题描述】:
我目前正在通过以太网开发 UDP 通信 PC ARM LM3S6965 (Luminary)。在 PC 上有一个模拟 UDP 服务器/客户端的 VB.net 应用程序。
当数据包从 PC 发送到 ARM LM3S6965 时,数据包被正确接收,但是当 ARM LM3S6965 将 UDP 数据包发送回 PC 时,数据包在某处丢失(应用程序没有收到它)。
奇怪的是,WireShark 会捕获这些到达 PC 的数据包,而且它们似乎是有效的。
在 Windows 中关闭防火墙没有帮助。我知道这个主题对于这个论坛来说可能是错误的,但是任何人都可以解释为什么 WireShark 会捕获这些数据包,而我的应用程序却没有? ARM LM3S6965 (192.168.0.100),PC (192.168.0.116),发送和接收通过端口号 3040,我正在从 ARM LM3S6965 微控制器接收的 VB.Net 应用程序发送广播消息。
这是 VB.net 代码:
Public Const mnPort As Int16 = 3040 'Port number to send/recieve data on
Public Const msBroadcastAddress As String = "255.255.255.255" 'Sends data to all LOCAL listening clients, to send data over WAN you'll need to enter a public (external) IP address of the other client
Public udpReceivingClient As UdpClient 'Client for handling incoming data
Public udpSendingClient As UdpClient 'Client for sending data
Public receivingThread As Thread 'Create a separate thread to listen for incoming data, helps to prevent the form from freezing up
Public mbiClosing As Boolean = False 'Used to close clients if form is closing
Public Sub InitializeSender()
udpSendingClient = New UdpClient(msBroadcastAddress, mnPort)
udpSendingClient.EnableBroadcast = True
End Sub
Public Sub InitializeReceiver()
udpReceivingClient = New UdpClient(mnPort)
'Dim start As ThreadStart = New ThreadStart(AddressOf MT_Receiver)
'receivingThread = New Thread(start)
'receivingThread.IsBackground = True
'receivingThread.Start()
End Sub
Public Sub MT_Send_UDP(ByVal lbTxBuffer() As Byte)
Try
udpSendingClient.Send(lbTxBuffer, lbTxBuffer.Length)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Try
udpReceivingClient.BeginReceive(AddressOf MT_RX_Callback, Nothing)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Sub MT_RX_Callback(ByVal IR As IAsyncResult)
Dim endPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 3040)
Dim lbData() As Byte
Dim llRet As UInt16
If mbiClosing = False Then
llRet = udpReceivingClient.Available
lbData = udpReceivingClient.EndReceive(IR, endPoint)
If llRet > 0 Then
MT_Validate_Msg(lbData)
End If
udpReceivingClient.BeginReceive(AddressOf MT_RX_Callback, Nothing)
End If
End Sub
Private Sub frmSearchUDP_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
mbiClosing = True
udpReceivingClient.Close()
udpSendingClient.Close()
frmMain.Timer.Enabled = True
End Sub
Private Sub frmSearchUDP_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
InitializeSender()
InitializeReceiver()
End Sub
【问题讨论】:
-
投反对票的人应该评论为什么?
-
请出示一些你的VB代码和一个wireshark数据包
-
@jeb 我怎么给你看wireshark数据包??
-
好的,这里是 cloudshark 链接,请参考行号。 196 和 197。link
标签: vb.net embedded microcontroller udpclient