noch ein kleines dateisenden problem
Verfasst: 08.12.2012 14:53
Hallo an alle
also hab hier ein client und ein server code:
server:
client:
wenn ich jetzt eine datei schicken will dann sendet der die aber beim clienten kommt alles bis auf die letzten paar bytes an :/ könnt es gerne mal selbst ausprobieren.. wenn man die zwei threads allerdigns weg lässt funktionierts
also es liegt irgendwie an den threads...
danke schonmal
also hab hier ein client und ein server code:
server:
Code: Alles auswählen
Global crude$, clientid
Procedure dateiempfangen(param)
dateiname$=StringField(crude$, 2, Chr(29))
Size=Val(StringField(crude$, 3, Chr(29)))
If OpenWindow(0, 0, 0, 200, 10, dateiname$, #PB_Window_BorderLess)
ProgressBarGadget(0, 0, 0, 200, 10, 0, Size)
EndIf
If Size > 0
*MemBuffer = AllocateMemory(Size)
errorcounter = 0
ReceivedBytes = 0
Repeat
SetGadgetState(0, ReceivedBytes)
result = ReceiveNetworkData(clientid, *MemBuffer + ReceivedBytes, Size - ReceivedBytes)
If result = -1
Delay(1)
errorcounter + 1
Else
ReceivedBytes + result
errorcounter = 0
EndIf
Until ReceivedBytes = Size Or errorcounter > 6000 ; Abbruch nach 6 Sekunden
EndIf
If Size > 0 And ReceivedBytes = Size
If CreateFile(0, GetHomeDirectory()+dateiname$)
WriteData(0, *MemBuffer, Size)
CloseFile(0)
FreeMemory(*MemBuffer)
PrintN(dateiname$+" wurde erfolgreich empfangen.")
CloseWindow(0)
Else
PrintN(dateiname$+" konnte nicht erstellt werden.")
CloseWindow(0)
EndIf
Else
PrintN(dateiname$+" konnte nicht komplett empfangen werden.")
CloseWindow(0)
EndIf
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Server")
Delay(500)
Print("Netzwerk wird initialisiert... ")
If InitNetwork()<>0
ConsoleColor(14, 0)
PrintN("initialisiert!")
ConsoleColor(7, 0)
Else
ConsoleColor(12, 0)
PrintN("nicht initialisiert!")
ConsoleColor(7, 0)
Input()
End
EndIf
Print("Server wird gestartet... ")
port=6600
result=CreateNetworkServer(0, port)
If result=0
ConsoleColor(12, 0)
PrintN("Server konnte nicht gestartet werden!")
ConsoleColor(7, 0)
Input()
End
Else
ConsoleTitle("Server - Port "+Str(port)+"")
ConsoleColor(14, 0)
PrintN("gestartet! Port "+Str(port)+"")
PrintN("")
ConsoleColor(7, 0)
Repeat
Delay(20)
serverevent=NetworkServerEvent()
If serverevent=#PB_NetworkEvent_Connect
clientid=EventClient()
clientid$=Str(clientid)
clientip$=IPString(GetClientIP(clientid))
clientport$=Str(GetClientPort(clientid))
ConsoleColor(2, 0)
PrintN("Client verbunden: ID: <"+clientid$+">")
PrintN("IP: <"+clientip$+"> Port: <"+clientport$+">")
PrintN("")
ConsoleColor(7, 0)
EndIf
If serverevent=#PB_NetworkEvent_Data
clientid=EventClient()
clientid$=Str(clientid)
clientip$=IPString(GetClientIP(clientid))
buffer.s=Space(2000)
ReceiveNetworkData(clientid, @buffer, 2000)
crude$=RTrim(buffer.s)
If StringField(crude$, 1, Chr(29))="dateisenden"
CreateThread(@dateiempfangen(), 0)
EndIf
EndIf
If serverevent=#PB_NetworkEvent_Disconnect
clientid=EventClient()
clientid$=Str(clientid)
ConsoleColor(4, 0)
PrintN("Client getrennt: ID: <"+clientid$+">")
PrintN("")
ConsoleColor(7, 0)
EndIf
ForEver
EndIfclient:
Code: Alles auswählen
Global verbindung
Procedure dateisenden(param)
datei$=OpenFileRequester("", "", "Alle Dateien | *.*", 0)
FF=ReadFile(#PB_Any, datei$)
If FF
dateiname$=GetFilePart(datei$)
Size.l=Lof(FF)
*MemBuffer = AllocateMemory(Size)
ReadData(FF, *MemBuffer, Size)
SendNetworkString(verbindung, "dateisenden"+Chr(29)+dateiname$+Chr(29)+Str(Size))
sendbytes=SendNetworkData(verbindung, *MemBuffer, Lof(FF))
If sendbytes=Lof(FF)
PrintN(dateiname$+" wurde komplett gesendet.")
Else
PrintN(dateiname$+" konnte nicht komplett gesendet werden.")
EndIf
CloseFile(FF)
FreeMemory(*MemBuffer)
EndIf
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Client")
Delay(500)
Print("Netzwerk wird initialisiert... ")
If InitNetwork()<>0
ConsoleColor(14, 0)
PrintN("initialisiert!")
ConsoleColor(7, 0)
Else
ConsoleColor(12, 0)
PrintN("nicht initialisiert!")
ConsoleColor(7, 0)
Input()
End
EndIf
Print("Verbindung wird hergestellt... ")
host$="localhost"
port=6600
verbindung=OpenNetworkConnection(host$, port)
If verbindung=0
ConsoleColor(12, 0)
PrintN("nicht hergestellt!")
ConsoleColor(7, 0)
Input()
End
Else
ConsoleTitle("Verbindung mit <"+host$+"> Port: <"+Str(port)+">")
ConsoleColor(14, 0)
PrintN("hergestellt! Port "+Str(port)+"")
PrintN("")
ConsoleColor(7, 0)
Print(">")
Repeat
input$=Input()
If input$<>""
CreateThread(@dateisenden(), 0)
EndIf
ForEver
EndIfdanke schonmal