Daten umsetzen zum versenden.

Anfängerfragen zum Programmieren mit PureBasic.
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Daten umsetzen zum versenden.

Beitrag 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
Zuletzt geändert von funkheld am 20.10.2013 14:23, insgesamt 1-mal geändert.
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

Re: Daten umsetzen zum versenden.

Beitrag 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. :)
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Re: Daten umsetzen zum versenden.

Beitrag 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
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Daten umsetzen zum versenden.

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Re: Daten umsetzen zum versenden.

Beitrag von funkheld »

Hallo, es funktioniert jetzt.

Danke für deine Hilfe.
Das ist wunderbar.

Gruss
Antworten