Seite 2 von 2
Re: Gibt es eine sendHTTPFile
Verfasst: 06.06.2015 11:06
von derschutzhund
Bisonte hat geschrieben:Nur kurz : Die verwirrenden Zeichen, die bei Anmeldung bei einem FTP Server erscheinen ....
Das liegt daran, das FTP Kommandos in ASCII sein müssen. Du wirst dein Programm höchstwahrscheinlich in Unicode kompiliert haben...
Es geht zwar auch, allerdings muss man dann selbst einen ASCII String senden (per SendNetworkData() und nicht per SendNetWorkString())
Wenn Du natürlich beide Programme (also Server UND Client) selbst mit PB erstellst, muss man dann selbst darauf achten, das beide Seiten das
gleiche "Protokoll" benutzen. Nützt nix, wenn der Server nur koreanisch spricht und der Client nur russisch (so mal als krasses Beispiel)

OK, hab ich abgespeichert, wobei die Textübertragung ja mit dem obigen code schon läuft.
Kann mir nun noch jemand sagen wie ich den obigen code (server / client) so erweitern muss um Dateien hin und her zu schieben?????
Das kann doch für euch kein Problem sein!
LG
Wolfgang
Re: Gibt es eine sendHTTPFile
Verfasst: 07.06.2015 12:28
von derschutzhund
Bisonte hat geschrieben:Nur kurz : Die verwirrenden Zeichen, die bei Anmeldung bei einem FTP Server erscheinen ....
Das liegt daran, das FTP Kommandos in ASCII sein müssen. Du wirst dein Programm höchstwahrscheinlich in Unicode kompiliert haben...
Es geht zwar auch, allerdings muss man dann selbst einen ASCII String senden (per SendNetworkData() und nicht per SendNetWorkString())
Wenn Du natürlich beide Programme (also Server UND Client) selbst mit PB erstellst, muss man dann selbst darauf achten, das beide Seiten das
gleiche "Protokoll" benutzen. Nützt nix, wenn der Server nur koreanisch spricht und der Client nur russisch (so mal als krasses Beispiel)

moin moin,
der Tip mit Ascii war richtig gut!
Wenn ich den atomic ohne unicode compiliere dann kann ich mit fillezilla eine Verbindung herstellen!
Das ist der Durchbruch
Jetzt gibt es noch ein Problem mit dem Startverzeichnis.
Irgendwie wird das nicht gefunden.
Wie muss denn die Verzeichnisstruktur sein?
Also nehmen wir mal an ich möchte unter Linux als Startverzeichnis /root/TAUSCH definieren.
Wo muss dann das Programm atomic-server sein oder ist es egal?
EDIT: Die Sache mit dem Verzeichnis hat sich soeben erledigt!
LG
Wolfgang
Re: Gibt es eine sendHTTPFile
Verfasst: 07.06.2015 20:32
von Sicro
derschutzhund hat geschrieben:auf dem Serverpc befindet sich die Datei upload.php
Datei löschen, brauchst du nicht.
derschutzhund hat geschrieben:Den PB-code habe ich auf meine Parameter angepasst:
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Global EOL$
EOL$ = Chr(13)+Chr(10)
; http://localhost:8080/test.php
server$ = "192.168.178.50"
Port = 8000 ; 80
; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = "upload.php"
uploadFile$ = OpenFileRequester("Bla", "", "*.*|*.*", 0);"C:\\loaderSettings.ini"
; Mal noch was besseres einfallen lassen :-\
; Boundary name
RandomSeed(Date())
GUID.l = Random(Date())
Debug GUID
; Content Size + Header + Boundary
Size.l = 0;
Structure ContentData
Size.i
*Memory
EndStructure
Structure PostRequest
Header.s
Boundary.s
List Content.ContentData()
EndStructure
Procedure Post_CreateRequeset(URL.s, Host.s, Port.i, Boundary.s)
Protected *Request.PostRequest = AllocateMemory(SizeOf(PostRequest))
If *Request
InitializeStructure(*Request,PostRequest)
*Request\Boundary = Boundary
*Request\Header = "POST /"+URL+" HTTP/1.1"+EOL$
*Request\Header + "Host: "+Host+":"+Str(Port)+EOL$
*Request\Header + "Accept: */*"+EOL$
*Request\Header + "Content-Type: multipart/form-data; boundary="+Boundary+EOL$
ProcedureReturn *Request
EndIf
ProcedureReturn #False
EndProcedure
Procedure Post_AddFileContent(*Request.PostRequest, ParameterName.s, FileName.s, *Memory, Length.i, Last.i=#False)
If *Request
Protected ContentHeader.s = "--" + *Request\Boundary + EOL$
ContentHeader + "Content-Disposition: form-Data; name="+Chr(34)+ParameterName+Chr(34)+"; filename="+Chr(34)+FileName+Chr(34) + EOL$
ContentHeader + "Content-Type: application/octet-stream"+EOL$+EOL$
Protected ContentEnd.s = ""
ContentEnd = EOL$ + "--" + *Request\Boundary
If Last
ContentEnd + "--"
EndIf
ContentEnd + EOL$
AddElement(*Request\Content())
*Request\Content()\Size = Len(ContentHeader) + Length + Len(ContentEnd)
*Request\Content()\Memory = AllocateMemory(*Request\Content()\Size+1) ;0 Character which we do not need..
If *Request\Content()\Memory
PokeS(*Request\Content()\Memory,ContentHeader, Len(ContentHeader),#PB_Ascii)
CopyMemory(*Memory, *Request\Content()\Memory + Len(ContentHeader), Length)
PokeS(*Request\Content()\Memory + Len(ContentHeader) + Length, ContentEnd, Len(ContentEnd),#PB_Ascii)
ProcedureReturn #True
EndIf
DeleteElement(*Request\Content())
EndIf
ProcedureReturn #False
EndProcedure
Procedure Post_SendRequest(*Request.PostRequest, ConnectionID)
If *Request
Protected ContentLength.i = 0
ForEach *Request\Content()
ContentLength + *Request\Content()\Size
Next
*Request\Header + "Content-Length: "+Str(ContentLength)+EOL$+EOL$
SendNetworkString(ConnectionID, *Request\Header)
ForEach *Request\Content()
SendNetworkData(ConnectionID, *Request\Content()\Memory,*Request\Content()\Size)
Next
SendNetworkString(ConnectionID,EOL$)
ProcedureReturn #True
EndIf
EndProcedure
Procedure Post_Free(*Request.PostRequest)
If *Request
ForEach *Request\Content()
FreeMemory(*Request\Content()\Memory)
DeleteElement(*Request\Content())
Next
ClearStructure(*Request, PostRequest)
FreeMemory(*Request)
EndIf
EndProcedure
*buff = AllocateMemory(FileSize(uploadFile$))
If ReadFile(1, uploadFile$)
Debug "File Loaded"
ReadData(1,*buff, MemorySize(*buff))
CloseFile(1)
EndIf
ConnectionID = OpenNetworkConnection(server$, Port)
If ConnectionID
Test = Post_CreateRequeset(filename$,server$, Port, "-------------------------------"+Str(GUID))
If Test
If Post_AddFileContent(Test, "datei","test.png",*buff, MemorySize(*buff),#True)
Post_SendRequest(Test, ConnectionID)
Debug "File has been sent!"
EndIf
Post_Free(Test)
EndIf
CloseNetworkConnection(ConnectionID)
Else
MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
End
Code: Alles auswählen
; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = "upload.php"
abändern zu:
Code: Alles auswählen
; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = ""
Code: Alles auswählen
If Post_AddFileContent(Test, "datei","test.png",*buff, MemorySize(*buff),#True)
abändern zu:
Code: Alles auswählen
If Post_AddFileContent(Test, "file",GetFilePart(uploadFile$),*buff, MemorySize(*buff),#True)
... und die Sache sollte laufen.
Re: Gibt es eine sendHTTPFile
Verfasst: 07.06.2015 21:55
von derschutzhund
Läuft!
Besten Dank!
LG
Wolfgang