Italian spedire Byte su UDP VB6>B4A

iz1kbp

Member
Buongiorno a tutti,
premetto che ho cercato sui vari forum ma non sono riuscito ad arrivare ad una soluzione.
Sto cercando di adattare una piccola routine scritta in Vb6 che spedisce un serie di byte verso un indirizzo ip di brocast.
Praticamente construisco i singoli byte da 0 a 18, li converto in stringa ,e poi spedisco la stringa via UDP
Giusto per conoscenza, invio un timecode secondo il protocollo ArtNet.Questa qui sotto è la semplice routine in Vb6 che tutt'ora utlizzo
B4X:
Dim buffer_smpte(18) as byte
dim stringa as string
buffer_smpte(0) = "A"
.
.
buffer_smpte(18)="25"
stringa=strConv(buffer_smpte, vbunicode)
winsock1.senddata stringa

Questo invece il mio tentativo in B4A
Mi trovo in grosse difficolta dato che la sintassi e gli argomenti sono parecchio differenti e non li comprendo tutti fino in fondo
Non sono una cima in fatto di programmazione, e di rete in particolare.
B4X:
'in process globals
Dim UDPSocket1 As UDPSocket    ' inzializzo il protocollo------------

' in globals'
Dim lung_byte As Int = 18
Dim buffer_smpte(lung_byte) As Byte 'inizializzo i bytes'
Dim IP As String                    ' indirizzo broadcast
Dim Packet As UDPPacket             'inizializzo il pacchetto da spedire'

' in activi create'
If FirstTime Then 'inzializzo il protoccolo e la porta------
        UDPSocket1.Initialize("UDP", 6554, 128)'
        IP="2.255.255.255"
        ToastMessageShow("Porta 6554 initializzata.",True)
    End If

'routine di creazione e spedizione stringa artnet
buffer_smpte(0)="A"
buffer_smpte(1)="r"
.
.
buffer_smpte(18)="25" 'frame rate smpte
    
Dim stringa As String = BytesToString(buffer_smpte, 0, buffer_smpte.Length, "UTF8")
Packet.Initialize(stringa, IP,6554)    'IP indirizzo dichiarato in partenza
UDPSocket1.Send(Packet)
quando compilo in debug mi restituisce

Errore nella linea: 333
Dim stringa As String = BytesToString(buffer_smpte, 0, buffer_smpte.Length, "UTF8")

Main - 333: La dichiarazione attuale non corrisponde alla precedente.<br />Previous: {Type=StringFunctions,Rank=0, RemoteObject=True}<br />Current: {Type=String,Rank=0, RemoteObject=True}



Qualcuno mi potrebbe indicare dove sbaglio?
Grazie a chiunque possa darmi una mano.
Scusate per il disturbo
Mario
 

iz1kbp

Member
oppsss..un problema l'ho trovato, ma non riesco ad editare il post.
avevo dichiarato stringa in altra maniera .
ho tolto la dichiarazione precedente (in globals) e mi restituisce l'errore

Errore nella compilazione del programma.
Descrizione dell'errore: Impossibile convertire il tipo: {Type=String,Rank=0, RemoteObject=True} in: {Type=Byte,Rank=1, RemoteObject=True}
Errore nella linea: 334
Packet.Initialize(stringa, IP,6554) 'IP indirizzo dichiarato in partenza
Word: stringa
 

iz1kbp

Member
forse ho risolto...
Lo pubblico magari puo servire a qualcuno

B4X:
buffer_smpte(0)=Asc("A")
.
.
buffer_smpte(18)="25" 'frame rate smpte
Dim dato_tc As String = BytesToString(buffer_smpte, 0, 18,"UNICODE")
Log(dato_tc)
Packet.Initialize(buffer_smpte,IP,6554)    'IP indirizzo dichiarato in partenza
UDPSocket1.Send(Packet)

Faccio un piccola critica all'help di B4R: gli esempi nella sezione CORE sono abbastanza datati:
a quanto pare certe sintassi usate negli esempi indicati nelle singole riche di Help danno addiritura errore se vengono presi come base di partenza.
Va bhe...diciamo che la fantasia non mi manca e quindi in qualche maniera ne sono uscito.
 

ivanomonti

Expert
Licensed User
Longtime User
e solo un esempio provalo e se mi dici il sultato sarei felice.


B4X:
' ============================================
' Module: SMPTE_ByteSend
' Created by: ALEX – MIASMART B4X BUILDER
' Technical support: MIASMART – B4X BUILDER v1
' Date: 2025-05-26
' Purpose: Invio di un array byte come stringa codificata via socket TCP
' ============================================

Sub Process_Globals
    Private sock As Socket
    Private astream As AsyncStreams
End Sub

Public Sub InitializeConnection(ip As String, port As Int)
    sock.Initialize("sock")
    sock.Connect(ip, port, 5000)
End Sub

' Evento chiamato quando la connessione è stabilita
Sub sock_Connected (Success As Boolean)
    If Success Then
        Log("Connesso al server.")
        astream.Initialize(sock.InputStream, sock.OutputStream, "astream")
        SendSMPTEBuffer
    Else
        Log("Errore di connessione.")
    End If
End Sub

Private Sub SendSMPTEBuffer
    Dim buffer_smpte(19) As Byte  ' 19 per index 0–18
    buffer_smpte(0) = Asc("A")
    buffer_smpte(1) = 50   ' "2"
    buffer_smpte(2) = 53   ' "5"
    For i = 3 To 18
        buffer_smpte(i) = 0
    Next

    Dim stringa As String = BytesToString(buffer_smpte, 0, buffer_smpte.Length, "UTF-16")
    astream.Write(stringa.GetBytes("UTF-16"))
    Log("Buffer SMPTE inviato (A + \"25\" + padding).")
End Sub
 

iz1kbp

Member
Ciao Ivano
ho provato il tuo codice insermenti in miei ip e port ma purtroppo non vedo nulla in rete (uso wireshark)
nella compilazione non ho errori
 
Top