Seite 1 von 1

Daten umsetzen zum versenden.

Verfasst: 19.10.2013 23:17
von funkheld
Hallo, guten Tag.
Ich möchte Daten versenden nach diesem Prinzip:

Code: Alles auswählen

n=len(cmd)
b = bytes((n>>b)&0xff for b in (24,16,8,0))
s.sendall(b+bytes(cmd,'utf-8'))
Wie kann man bitte dieses Komplizierte in Purebasic umsetzen ?
Es geht über den Client-Localhost 127.0.0.1 mit der Portnummer 42001
Es ist für Scratch 1.4

Danke.
Gruss

Re: Daten umsetzen zum versenden.

Verfasst: 19.10.2013 23:23
von mirca
Ich kenn Scratch nicht aber du kannst RunProgram("cmd.exe", "/c BEFEHL") ausführen.
Mit #PB_Program_Open und #PB_Program_Read kannst du den Output empfangen.
Gibts in der Hilfe von RunProgram auch ein Beispiel code.

PS: Du hast eine PN von mir bekommen. :)

Re: Daten umsetzen zum versenden.

Verfasst: 20.10.2013 14:24
von funkheld
Jup, danke.
Ich habe jetzt eine einfachere Variante von Python oben bekommen.
Wie kann man die jetzt bitte umsetzen in Purebasic ?

Danke.
Gruss

Re: Daten umsetzen zum versenden.

Verfasst: 20.10.2013 17:09
von Danilo
funkheld hat geschrieben:Ich habe jetzt eine einfachere Variante von Python oben bekommen.
Wie kann man die jetzt bitte umsetzen in Purebasic ?

Code: Alles auswählen

Structure SendArray
    length.a[4]
    command.a[0]
EndStructure


cmd.s = "command"

n = Len(cmd)
*mem.SendArray = AllocateMemory(SizeOf(SendArray) + 3*n)
If *mem
    *mem\length[0] = (n >> 24) & $FF
    *mem\length[1] = (n >> 16) & $FF
    *mem\length[2] = (n >>  8) & $FF
    *mem\length[3] = (n      ) & $FF
    
    length = PokeS(@*mem\command[0],cmd,-1,#PB_UTF8)
    length + 4
    
    ShowMemoryViewer(*mem,length)
    
    ;SendNetworkData(clientID, *mem, length)
    
    FreeMemory(*mem)
EndIf
Oder als Procedure:

Code: Alles auswählen

Structure SendArray
    length.a[4]
    command.a[0]
EndStructure


Procedure SendCommand(clientID,cmd.s)
    Protected result,n,length,*mem.SendArray
    n = Len(cmd)
    *mem = AllocateMemory(SizeOf(SendArray) + 3*n)
    If *mem
        *mem\length[0] = (n >> 24) & $FF
        *mem\length[1] = (n >> 16) & $FF
        *mem\length[2] = (n >>  8) & $FF
        *mem\length[3] = (n      ) & $FF
        
        length = PokeS(@*mem\command[0],cmd,-1,#PB_UTF8)
        length + 4
        
        ShowMemoryViewer(*mem,length)
        
        If clientID
            If SendNetworkData(clientID, *mem, length) = length
                result = #True
            EndIf
        EndIf
        
        FreeMemory(*mem)
    EndIf
    ProcedureReturn result
EndProcedure

ok = SendCommand(clientID,"command")
Debug ok

Re: Daten umsetzen zum versenden.

Verfasst: 20.10.2013 17:50
von funkheld
Hallo, es funktioniert jetzt.

Danke für deine Hilfe.
Das ist wunderbar.

Gruss