趣味として、イーサネットに接続された LED サインをプログラミングして、画面上でメッセージをスクロールすることに興味があります。しかし、 VB.NETで UDP 送信者を作成するのに問題があります(現在 2008 を使用しています)。
現在、標識は、プログラミングに関する仕様書を作成するのに十分なほど優れています。
しかし、それに送信する行の例 (3 ページ):
<0x01>Z30<0x02>AA<0x06><0x1B>0b<0x1C>1<0x1A>1This message will show up on the screen<0x04>
16 進文字を表す <0x01> などのコードを使用します。
これを署名に送信するには、UDPを使用する必要があります。ただし、次のように、送信する前にメッセージをASCIIとしてエンコードした例はすべて( UDPから:クライアントはサーバーにパケットを送信し、サーバーからパケットを受信します):
Imports System.Threading
Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Public Class MainClass
Shared Dim client As UdpClient
Shared Dim receivePoint As IPEndPoint
Public Shared Sub Main()
receivePoint = New IPEndPoint(New IPAddress(0), 0)
client = New UdpClient(8888)
Dim thread As Thread = New Thread(New ThreadStart(AddressOf WaitForPackets))
thread.Start()
Dim packet As String = "client"
Console.WriteLine("Sending packet containing: ")
'
' Note the following line below, would appear to be my problem.
'
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(packet)
client.Send(data, data.Length, "localhost", 5000)
Console.WriteLine("Packet sent")
End Sub
Shared Public Sub WaitForPackets()
While True
Dim data As Byte() = client.Receive(receivePoint)
Console.WriteLine("Packet received:" & _
vbCrLf & "Length: " & data.Length & vbCrLf & _
System.Text.Encoding.ASCII.GetString(data))
End While
End Sub ' WaitForPackets
End Class
VB.NET で 16 進コードを出力するには、構文が &H1A である可能性があると思います - 仕様で定義されているものを <0x1A> として送信します。
そのコードを変更して、正しくフォーマットされたパケットをこの標識に正しく送信できますか?
Grant (16 進数を含むパケットを送信した後)、Hamish Smith (関数を使用して 16 進数値を取得)、および Hafthor (例にハードコードされた chr() メッセージ) からの回答は、すべてが機能しませんでした。だから、他に何がうまくいかないかを調べるために調査します。理論的には、この文字列が正常に送信された場合、"OK" を含むメッセージが返されるはずです。これは、いつ機能したかを知るのに役立ちます。
試してみたところ、通過するパケットを監視できるようになりました。動作するパケットの例は次のとおりです (生の 16 進数): http://www.brettjamesonline.com/misc/forums/other/working.raw vs 私のバージョン: http://www.brettjamesonline.com/misc/forums/other /failed.raw . 違いは、私の 16 進コードがまだ正しくエンコードされていないことです。
このコードを使用して、パケットを生成して送信しました。
container = &H1 & "Z" & &H30 & &H2 & "temp.nrg" & &H1C & "1Something" & &H4
' This did not appear to work neither
'container = Chr(&H1) & "Z" & Chr(&H30) & Chr(&H2) & Chr(&H1C) & "1Something" & Chr(&H4)
'<0x01>Z00<0x02>FILENAME<0x1C>1Test to display<0x04> <- the "official" spec to send
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(container)
(完全なスニペット: http://pastebin.com/f44417743 .)