Seite 3 von 3
Verfasst: 15.12.2004 14:48
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

Verfasst: 15.12.2004 15:26
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

Verfasst: 15.12.2004 15:29
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
Verfasst: 15.12.2004 15:47
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

Verfasst: 15.12.2004 15:50
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

Verfasst: 17.12.2004 00:18
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.