我有一个简单的 vb.net 程序,我正在尝试发送 FINS 命令并使用 UDP 接收响应。我一直使用以下问题作为参考点FINS Commands C#,但相信我的数据包有问题,或者我只是没有完全正确。
我当前的程序有 4 个文本框(TBIP
, TBPORT
, TBSEND
, TBReceive
)。当我运行程序时,我输入要发送的 IP、端口、数据包信息,然后单击一个按钮。我想要发生的是收到的信息发送到TBReceive
。
我的表单加载代码如下所示:
Dim publisher As New Sockets.UdpClient(0)
Dim Subsriber As New Sockets.UdpClient(9600)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Subsriber.Client.ReceiveTimeout = 5000
Subsriber.Client.Blocking = False
End Sub
我的按钮点击:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
publisher.Connect(TBIP.Text, TBPort.Text)
Dim Sendbytes() As Byte = ASCII.GetBytes(TBSend.Text)
publisher.Send(Sendbytes, Sendbytes.Length)
Subsriber.Client.Blocking = True
Timer1.Start()
End Sub
我的计时器:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim rcvbytes As [Byte]() = Subsriber.Receive(ep)
Dim returndata As String = ASCII.GetString(rcvbytes)
TBReceive.Text = returndata.ToString
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
在欧姆龙 PLC 上,我正在尝试读取 CIO 100。我的 IP 地址是 10.0.1.91,所以我的字符串在下面。(5B 是最后一个八位字节):
80 00 02 01 02 00 01 5B 00 12 01 01 00 00 12 34
为了便于阅读,我在 HEX 位之间添加了空格。
第一个问题可能是我正在转换或尝试将信息作为 ASCII 发送吗?任何帮助,将不胜感激。