Es geht voran!
Ich kann nun einen Text vom Client auf den Server übertragen wo er sogar gelesen werden kann!

Server:
Code: Alles auswählen
#Version = "0.3"
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0) : End
EndIf
ClientIP.s
Port = 21
BaseDirectory$ = "ftp/"
CurrentDirectory$ = BaseDirectory$
AtomicTitle$ = "Atomic FTP Server v"+#Version
EOL$ = Chr(13)+Chr(10)
*Buffer = AllocateMemory(10000)
If CreateNetworkServer(0, Port)
OpenWindow(0, 300, 300, 230, 30, "Atomic FTP Server (Port "+Str(Port)+")")
TextGadget(1, 10, 8, 200, 20, "Atomic FTP Server Ready.")
Repeat
WEvent = WindowEvent()
SEvent = NetworkServerEvent()
If WEvent = #PB_Event_CloseWindow
Quit = 1
EndIf
If SEvent
ClientID = EventClient()
Select SEvent
Case 1 ; New client connected
SetGadgetText(1, "New client connected !")
SendNetworkString(ClientID, "220 - Atomic FTP Server v0.1 ready"+EOL$)
Case 4 ; New client has closed the connection
Default
RequestLength = ReceiveNetworkData(ClientID, *Buffer, 2000)
If RequestLength > 3
PokeL(*Buffer+RequestLength-2, 0)
EndIf
Gosub ProcessRequest
EndSelect
Else
Delay(20)
EndIf
Until Quit = 1
CloseNetworkServer(0)
Else
MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
End
ProcessRequest:
Command$ = PeekS(*Buffer,#PB_Unicode)
Debug Command$
Position = FindString(Command$, " ", 1)
If Position
Argument$ = Mid(Command$, Position+1, Len(Command$)-Position)
Command$ = UCase(RTrim(Left(Command$, Position-1)))
EndIf
SetGadgetText(1, "Last command: "+Command$)
Select Command$
Case "HELP"
Gosub Command_HELP
Case "LIST"
Gosub Command_LIST
Case "PASS"
Gosub Command_PASS
Case "PORT"
Gosub Command_PORT
Case "PWD"
Gosub Command_PWD
Case "SYST"
Gosub Command_SYST
Case "USER"
Gosub Command_USER
Default
Gosub Command_UNKNOWN
EndSelect
Return
Command_HELP:
SendNetworkString(ClientID, "214 - You wanna some help ? :-D"+EOL$)
Return
Command_LIST:
SendNetworkString(ClientID, "150 - Opening connection"+EOL$)
FTPConnection = OpenNetworkConnection(ClientIP, ClientPort)
If FTPConnection
a$ = ""
If ExamineDirectory(0, CurrentDirectory$, "*.*")
NumberFiles = -1
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = 2
a$ = a$+"drwxr-xr-x 6 1024 512 Jan 23 10:18 "+DirectoryEntryName(0)+EOL$
ElseIf Type = 1
a$ = a$+"rwxr-xr-x 6 512 "+Str(DirectoryEntrySize(0))+" Jan 23 10:18 "+DirectoryEntryName(0)+EOL$
EndIf
NumberFiles+1
Wend
EndIf
SendNetworkString(FTPConnection, "total "+Str(NumberFiles)+EOL$+a$)
CloseNetworkConnection(FTPConnection)
EndIf
SendNetworkString(ClientID, "226 - Listing finished"+EOL$)
Return
Command_PASS:
SendNetworkString(ClientID, "230 - Welcome, enjoy this FTP site"+EOL$)
Return
Command_PORT:
; Build a real IP
;
ClientIP = ""
Position = FindString(Argument$, ",", 1)
ClientIP = ClientIP+Mid(Argument$, 1, Position-1)+"."
NewPosition = FindString(Argument$, ",", Position+1)
ClientIP = ClientIP+Mid(Argument$, Position+1, NewPosition-Position-1)+"."
Position = FindString(Argument$, ",", NewPosition+1)
ClientIP = ClientIP+Mid(Argument$, NewPosition+1, Position-NewPosition-1)+"."
NewPosition = FindString(Argument$, ",", Position+1)
ClientIP = ClientIP+Mid(Argument$, Position+1, NewPosition-Position-1)
ClientIP = Trim(ClientIP)
; Get the port..
;
Position = FindString(Argument$, ",", NewPosition+1)
ClientPort = Val(Mid(Argument$, NewPosition+1, Position-NewPosition-1)) << 8+Val(Right(Argument$, Len(Argument$)-Position))
SendNetworkString(ClientID, "200 - Ok"+EOL$)
Return
Command_PWD:
SendNetworkString(ClientID, "257 /"+EOL$)
Return
Command_UNKNOWN:
SendNetworkString(ClientID, "500 - Unknow command"+EOL$)
Return
Command_USER:
If Argument$ = "anonymous"
a$ = "331 - User anonymous accepted. Please enter your e-mail"+EOL$
Else
a$ = "331 - Hello "+Argument$+". Please enter your password"+EOL$
EndIf
SendNetworkString(ClientID, a$)
Return
Command_SYST:
SendNetworkString(ClientID, "215 - Atomic FTP Server v"+#Version+EOL$)
Return
und der Test-client
Code: Alles auswählen
EnableExplicit
;
; ------------------------------------------------------------
;
; PureBasic - Network (Client) example file
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
Define Port.i, ConnectionID.i, EOL$
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 21
EOL$ = Chr(13)+Chr(10)
ConnectionID = OpenNetworkConnection("192.168.178.50", Port)
If ConnectionID
MessageRequester("PureBasic - Client", "Client connected to server...", 0)
; SendNetworkString(ConnectionID, "An hello from a client !!! :-)"+EOL$,#PB_Unicode)
SendNetworkString(ConnectionID, "HELP Anna"+EOL$,#PB_Unicode)
MessageRequester("PureBasic - Client", "A string has been sent to the server, please check it before quit...", 0)
CloseNetworkConnection(ConnectionID)
Else
MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
End
Inzwischen bin ich durch den Servercode soweit durchgestiegen, dass ich beliebige Befehle einbauen könnte.
Die Frage ist jetzt aber wie ich Dateien übertragen kann??
Vermutlich geht da was mit "SendNetworkData"? Aber wie?
Und mit dieser Funktion ist doch dann auch die Dateigröße auf 2000 bzw. 65536 Byte begrenzt?
Also, wie kann ich da jetzt Dateien hin und her schieben???
LG
Wolfgang