求助:UDP只能发送,收不到数据,我已哭晕在厕所……
vb.net吧
全部回复
仅看楼主
level 1
0427付强 楼主
VB.net写了一个小程序作为上位机,与同一子网内的其它硬件通讯,现在出现一个问题,就是上位机可以通过UDP向外发送数据,但却无法接收到下位机发送的数据,电脑防火墙已关闭,“网路岗”抓包能看到下位机发送的数据包,一个叫做“网络调试助手”的小程序也能收到数据,但就是这个上位机收不到,不知啥原因,请高手指点!
收发部分代码:
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Module ProtocolModule
'传输协议控制模块
Public Const MyName As String = "PC_TestDevice"
Public Const MaxPackNum As UInt16 = 255 '最大数据块数量
Public Const MaxPackSize As UInt16 = 255 '最大数据块尺寸
Public SendPackBuf(MaxPackNum, MaxPackSize) As Byte '发送数据包缓冲区
Public SendPackSize(MaxPackSize) As UInt16 '每个数据包的尺寸
Public SendPackNum As UInt16 '当前已经制作的数据包序号
Public LinkMode As Byte = 0 '定义当前所使用的连接模式以及连接状态,0为无连接,1为UDP连接,2为TCP连接
Public AimPortNum As UInt16 '目的地端口号
Public MyPortNum As UInt16 '本机目前使用的端口号
Public AimIP As System.Net.IPAddress '目的IP地址
Public MyIP As System.Net.IPAddress '本机IP地址
Public UDPLink As New UdpClient(10000) '实例化一个UDP连接
Public NowDataSize As New Byte '当前数据的长度
'计算数据块校验和
Public Function GetCheckSum(ByVal packnum As UInt16) '校验和计算函数
Dim sum As UInt32
Dim i As UInt16
For i = 1 To SendPackSize(packnum) '循环计算该数据包内的每一个元素
sum = sum + SendPackBuf(packnum, i) '计算累加和
Next
Return sum Mod 256 '返回计算出的校验和
End Function
'启动连接
Public Sub StartLink() '过程:建立一个TCP或UDP连接
If LinkMode = 0 Then
LinkMode = 1
Form2.LinkButton.Text = "关闭连接"
UDPLink = New UdpClient
UDPLink.Connect(AimIP.ToString, AimPortNum) '设置目的端口号和IP地址
ElseIf LinkMode = 1 Then
Form2.LinkButton.Text = "启动连接"
UDPLink.Close()
LinkMode = 0
End If
Debug.Print("已经运行到数据接收部分")
Dim ipendpoint As New IPEndPoint(IPAddress.Any, 0)
Dim receivebytes As [Byte]() = UDPLink.Receive(ipendpoint)
Debug.Print("UDP数据接收完成")
End Sub
注:本人是专门从事硬件电路设计的,计算机编程完全自学,公司缺人手暂时让我开发上位机了……如有低级错误,请不要太凶狠的嘲讽哦
2016年07月07日 05点07分 1
level 7
f LinkMode = 0 Then
LinkMode = 1 '设置为1,肯定执行后面的 elseif语句了,所以显示未连接!
*****
'在elseif 前 加上(exit sub) 就好了
ElseIf LinkMode = 1 Then
********
End If
2016年07月08日 01点07分 2
level 1
看防火墙
2017年05月18日 03点05分 3
1