UDP Server empfängt nichts vom UDP Client

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Die Schleife dient dazu, dass der Client so lange den Befehl [c]$0000[/c](Connect, MD5 Passwort) sendet, bis sich der Server meldet.

noch n kleiner edit, da ich zu faul für n doppelpost bin:
Also, ich habe mir nun gaaanz genau überlegt wie ich das mit UDP mache. Das Packete unsortiert, mißhandelt, zerstückelt oder ähnliches ankommen hab ich kein Problem mit. Ich hab das Protokoll schon (in meinen Augen) ziehmlich gut durchdacht.

Der Sender zerhaxelt eine Datei in 512 KB große Dateischnippsel und sendet diese dann mit den Daten [c]DateiNr(vom Server zugewisen)[3]DateiSchnipsel Nr[3]<Dateischnipsel>[/c]) So ist es auch möglich das, wenn alles empfangen wurde, auch zu überprüfen welche Pakete fehlen oder in irgend einer weise Schrott sind (senden von MD5 Fingerprint einzelner Packete, auf verdacht) und ggf. Neuversand. <- alles durchdacht :mrgreen:
Bild
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

LittleFurz hat geschrieben:Die Schleife dient dazu, dass der Client so lange den Befehl [c]$0000[/c](Connect, MD5 Passwort) sendet, bis sich der Server meldet.
Ok, hatte ich übersehen, dass der Server in der Parse...-Prozedur auch was zurücksendet.

Der Server empfängt bei mir gar nichts/rien/nada/null/niente. Auch wenn ich statt UPDDataAvailable direkt auf UDPReceive abfrage, da kommt nichts an. Könnte es sein, dass diese Userlib nur in einer Instanz auf einem Rechner laufen kann, also Server und Client nicht auf dem gleichen Rechner sein können?

Mehr Zeit habe ich leider nicht dafür. Nimm FTP :mrgreen:
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

stbi hat geschrieben:Könnte es sein, dass diese Userlib nur in einer Instanz auf einem Rechner laufen kann, also Server und Client nicht auf dem gleichen Rechner sein können?
PureFan ?
stbi hat geschrieben:Nimm FTP
Niemals. Ich will das jetzt gelöst bekommen... Daten sind jetzt schon mit Atomic FTP Server auf dem NB, will aber nu das Programm zum laufen bekommen. Ich hab 2 Seiten Protokoll geschrieben, ich will das jetzt umgesetzt bekommen.

Hier der Code, mit dem Client klappt das ganze:

Code: Alles auswählen

Global sckMain.UDPconnect
Global *UDPStack.l
Global UDPThread.l

UDPInitNetwork()

Procedure.s Base64Encode(strText.s)
    DefType.s Result
    
    *B64EncodeBufferA = AllocateMemory(Len(strText)+1)
    *B64EncodeBufferB = AllocateMemory((Len(strText)*3)+1)
    
    PokeS(*B64EncodeBufferA, strText)
    Base64Encoder(*B64EncodeBufferA, Len(strText), *B64EncodeBufferB, Len(strText)*3)
    Result = PeekS(*B64EncodeBufferB)
    
    FreeMemory(*B64EncodeBufferA)
    FreeMemory(*B64EncodeBufferB)
    
    ProcedureReturn Result
EndProcedure

Procedure ViewStack()
    DefType.l DataAvailable
    
    *UDPBuffer = AllocateMemory(1025)
    Repeat
        DataAvailable = UDPDataAvailable(sckMain)
        If DataAvailable <> 0
            Debug DataAvailable
            PrintN("Data available")
            UDPReceive(sckMain, *UDPBuffer, 1024)
            PrintN(PeekS(*UDPBuffer, 1024))
        EndIf
        
        Delay(1)
    ForEver
EndProcedure

Procedure.b SendNetPacket(lngBefehl.l, strGUID.s, strData.s)
    DefType.l PaketLen
    DefType.s tmpPaket
    
    strData = Base64Encode(strData)
    PaketLen = Len(strData)+Len(strGUID)+32
    *UDPSendBuffer = AllocateMemory(PaketLen)
    tmpPaket = Hex(lngBefehl)
    tmpPaket = tmpPaket + Chr(2)
    tmpPaket = tmpPaket + Hex(Len(strData))
    tmpPaket = tmpPaket + Chr(2)
    tmpPaket = tmpPaket + strGUID
    
    tmpPaket = tmpPaket + Chr(1)
    tmpPaket = tmpPaket + strData
    tmpPaket = tmpPaket + Chr(4)
    PokeS(*UDPSendBuffer, tmpPaket) 
    
    Debug "Sending Buffer: " + PeekS(*UDPSendBuffer)
    UDPSend(sckMain, *UDPSendBuffer, PaketLen)
    RtlFillMemory_(*UDPSendBuffer, PaketLen, 0)
    FreeMemory(*UDPSendBuffer)
EndProcedure

Procedure ParseCommand(strZeile.s)    
    DefType.s MapCMD, MapParam, strTemp
    DefType.l ParmPtr, tmpFnktmp1, tmpFnktmp2
    Dim MapArray.s(20)
    
    MapCMD   = StringField(strZeile, 1, " ")
    MapParam = Right(strZeile, Len(strZeile) - FindString(strZeile, " ", 1))
    
    Debug strZeile
    For ParmPtr = 1 To 20
        strTemp = Trim(StringField(MapParam, ParmPtr, ","))
        MapArray(ParmPtr - 1) = strTemp
    Next
    
    Select MapCMD
        Case "/debug"
            PrintN(MapArray(0))
        Case "/connect"
            Print("Build connection to " + MapArray(0) + "...")
            If UDPConnectServer(Val(MapArray(1)), MapArray(0), sckMain)
                UDPStartCaptureEvents(sckMain) 
                UDPThread = CreateThread(@ViewStack(), 0)
                PrintN("OK")
            Else
                PrintN("Error")
            EndIf
        Case "/send"
            Debug MapArray(0)
            PokeS(*UDPStack, MapArray(0))
            UDPSend(sckMain, *UDPStack, 2000)
        Case "/paket"
            SendNetPacket(Val(MapArray(0)), MapArray(1), MapArray(2))
    EndSelect
EndProcedure

*UDPStack = AllocateMemory(2048)
OpenConsole()
Repeat
    Eingabe.s = Input(): PrintN("")
    ParseCommand(Eingabe)
ForEver
Bild
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

LittleFurz hat geschrieben:
stbi hat geschrieben:PureFan ?
??? sorry, den Hinweis kapiere ich nicht ???

Ansonsten gefällt mir Deine sportliche Einstellung, weiter so, hoffentlich kriegst Du das alles noch so hin wie geplant :allright:
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

stbi hat geschrieben:
LittleFurz hat geschrieben:
stbi hat geschrieben:PureFan ?
??? sorry, den Hinweis kapiere ich nicht ???
Das war ein Wink an Purefan. Er hat die Userlib gemacht. Ich denke aber, das die UDP Lib weniger das Problem ist, da es mti dem Client, den ich oben gepostet habe, funktioniert :freak:
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

mich streßt das jetz total -_-. Ich hab das Programm schon auf TCP umgeschrieben (da funktioniert es mit der dürftigen Network Lib). Ichwill jetzt trozdem wissen warum das nicht mit UDP Funktioniert, damit ich den selben Fehler nicht 2x mache.
Bild
Antworten