Seite 1 von 1

Datei von A nach B schicken

Verfasst: 13.05.2009 07:41
von johann.boehme
Hi ^^
Ich würde gerne mit SendNetwerkData ne Datei von A nach B schicken
(Nein, nicht mit SendNetworkFile! ;) )

Aber irgendwie komm ich nicht so richtig dahinter!
Hat jemand sowas schonmal gemacht und nen Codetemplate da?

Mein Speicherbereich, den ich Verschicke sieht folgendermaßen aus:

Code: Alles auswählen

jfiStart0834403728@@@@@@@@@@@@@@@@@@@@jfiEndOfFile
   |            |                                 |                                 |
Start          Größe der Datei          Inhalt der                    End
Command  als Quad                     Datei                          Command
Ist ja an sich kein Problem. Aber irgendwie klappt das mit dem End Command bei manchen datein nicht...


Client:

Code: Alles auswählen

InitNetwork()
OpenConsole()
ConnectionID=OpenNetworkConnection("127.0.0.1", 999)
If ConnectionID
  PrintN("Connected")
Else
  PrintN("No Connection")
  Input()
  End
EndIf

Procedure sendfile(file.s, ConnectionID)
size.q=FileSize(file.s)
ReadFile(0, file.s)

length.q=Lof(0)
PrintN("Länge: "+Str(length))
*MemoryID = AllocateMemory(length+200)
PokeS(*MemoryID, "jfiStart")
PokeQ(*MemoryID+9, size)
bytes.q = ReadData(0, *MemoryID+17, length)
PokeS(*MemoryID+17+length, "jfiEndOfFile")
PrintN("Inhalt: "+PeekS(*MemoryID))
PrintN("Datei: "+PeekS(*memoryID+17))
If bytes.q<>length.q
  PrintN("Checksum Error!!!")
  End
EndIf
SendNetworkData(ConnectionID, *MemoryID, length+29)
CloseFile(0)
EndProcedure

file$=""
While file$<>"exit" Or file$<>"end"
  PrintN("Welche Datei senden?")
  file$=Input()
  sendfile(file$, ConnectionID)
Wend


Server:

Code: Alles auswählen

InitNetwork()
OpenConsole()
If CreateNetworkServer(0, 999)
  PrintN("Server open")
  *Buffer = AllocateMemory(1000000)
  size.q=0
  count.q=0
Else
  PrintN("Could not create server")
  End
EndIf

Repeat
SEvent = NetworkServerEvent()
If SEvent
  ClientID = EventClient()
    Select SEvent
        Case 1
          PrintN("New Client has connected: "+Str(CliendID))
  
        Case 2
          PrintN("Client "+Str(ClientID)+" has send a packet !")
          received=ReceiveNetworkData(ClientID, *Buffer, 1000000)
          PrintN("Received: "+Str(received)+" Bytes")
          If PeekS(*Buffer, 8)="jfiStart"
            PrintN("Start of The File!!!")
            len.q=PeekQ(*Buffer+8)
            OpenFile(1, "C:\DATA.txt")
            WriteData(1, *Buffer+17, received-17)
            PrintN("Size: "+Str(len.q)+" Bytes")
            PrintN("")
            If PeekS(*Buffer+received-12)="jfiEndOfFile"
              CloseFile(1)
              PrintN("END OF DOKUMENT!")
            EndIf
          ElseIf PeekS(*Buffer+received-12)="jfiEndOfFile"
            WriteData(1, *Buffer, received)
            CloseFile(1)
            PrintN("END OF DOKUMENT!")
          Else
            WriteData(1, *Buffer, received)
          EndIf
          PrintN(PeekS(*Buffer+received-12))
          
        Case 3
          PrintN("Client "+Str(ClientID)+" has send a file via the network !")
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          PrintN( "Client "+Str(ClientID)+" has closed the connexion...")
     EndSelect

EndIf


Until Quit=1


Input()

Wär cool, wenn jemand mir helfen könnte ^^

Re: Datei von A nach B schicken

Verfasst: 13.05.2009 08:48
von gnasen
johann.boehme hat geschrieben:Hat jemand sowas schonmal gemacht und nen Codetemplate da?
Hi, ich habe soetwas schonmal gemacht, zu finden hier: http://www.purebasic.fr/english/viewtopic.php?t=34507

Nur grad wenig Zeit, aber vielleicht kannst du dir ja schonmal Ideen holen.