Seite 1 von 3
server kann keine datei empfangen wenn mehrere clienten da s
Verfasst: 28.11.2010 21:46
von shutdown27
mein server kann aus irgendeinem grund keine datei empfangen wenn ein weiterer client im selben moment irgendwas sendet (string
oder so)
also einen fehler oder so bekomme ich nicht aber das
NetworkServerEvent() bleibt bei #PB_NetworkEvent_File
so bekomme ich in meinem code die ganze zeit die meldung das ein client eine datei geschickt hat und ich muss den client beenden um es abzubrechen
kann ich das beheben oder umgehen?
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 28.11.2010 23:39
von Xaby
Du wolltest gern wissen,
wie ein Code aussehen sollte, damit du
gleichzeitig Dateien von mehreren Clients empfangen kannst.
Ich denke, ein beliebter Fehler ist eventuell, dass die Connection-ID nicht stimmt und du eventuell bei ReceiveNetworkFile(Verbindung, DateiName$)
den gleichen DateiNamen und überschreibst gleichzeitig die Datei oder aber du hast aus Versehen die selbe Verbindung und störst damit das Vorhaben.
Ich kann nur Mutmaßen

Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 02:04
von STARGÅTE
Code bitte!
Ansonsten können wir nicht detailiert weiterhelfen.
Zur Clientunterscheidung gibt es auf der Serverseite:
EventClient()
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 19:00
von shutdown27
stargate: ja weis ich ich habe schon ein gadget mit allen clients und so sachen
xaby: ums gleichzeitige datei empfangen gehts nicht es geht überhaupt um das empfangen einer datei wenn in dem moment des downloads aber ein andere client einen string sendet oder connected funktionierts halt nicht
hier mal ein wenig code futter
Code: Alles auswählen
SEvent = NetworkServerEvent()
ClientID = EventClient()
If SEvent
Select SEvent
Case #PB_NetworkEvent_Connect
PrintL( "A new client has connected !")
AddGadgetItem(12, -1, Str(ClientID))
AddGadgetItem(13, -1, "("+Str(ClientID)+")")
Case #PB_NetworkEvent_Data
ReceiveNetworkData(ClientID, *Buffer, 5000)
LastName=PeekS(*Buffer)
PrintL(NameForID(ClientID)+": "+LastName)
If Mid(LastName,1,6)="ORDNER"
CreateDirectory("C:\Users\Peter\Desktop\rofl\"+Str(ClientID)+"\"+Mid(LastName,7))
ElseIf Mid(LastName,1,8)="TREEFILE"
pos=FindString(LastName,"|",1)
AddGadgetItem(1, -1, Mid(LastName,pos+1), 0, Val(Mid(LastName,9,pos-9)))
ElseIf Mid(LastName,1,10)="TREEORDNER"
pos=FindString(LastName,"|",1)
AddGadgetItem(1, -1, Mid(LastName,pos+1), 0, Val(Mid(LastName,11,pos-11)))
ElseIf Mid(LastName,1,2)="13"
SendNetworkString(ClientID, "wait")
EndIf
FillMemory(*Buffer, 5000)
;Debug LastName
Case #PB_NetworkEvent_File
PrintL( "Client "+Str(ClientID)+" has send a file via the network !")
CreateDirectory("C:\Users\Peter\Desktop\rofl\"+Str(ClientID))
If LastName="files.txt"
DeleteFile("C:\Users\Peter\Desktop\rofl\"+Str(ClientID)+"\files.txt")
LastName=""
If ReceiveNetworkFile(ClientID, "C:\Users\Peter\Desktop\rofl\"+Str(ClientID)+"\files.txt")
If ReadFile(0, "C:\Users\Peter\Desktop\rofl\"+Str(ClientID)+"\files.txt")
While Not Eof(0)
readed=ReadString(0)
pos=FindString(readed,"|",1)
AddGadgetItem(1, -1, Mid(readed,pos+1), 0, Val(Mid(readed,1,pos)))
Wend
CloseFile(0)
EndIf
Else
MessageRequester("","rofl")
EndIf
ReceiveNetworkFile(ClientID, "C:\Users\Peter\Desktop\rofl\"+Str(ClientID)+"\"+GetFilePart(LastName))
Else
If listdownload=1
RemoveGadgetItem(8, 0)
If CountGadgetItems(8)=0
listdownload=0
Else
SendNetworkString(ClientID, "SENDFILE"+GetGadgetItemText(8,0))
EndIf
EndIf
EndIf
Case #PB_NetworkEvent_Disconnect
RemoveGadgetItem(13,FindGadgetItem(12,Str(ClientID)))
RemoveGadgetItem(12,FindGadgetItem(12,Str(ClientID)))
PrintL( "Client "+Str(ClientID)+" has closed the connection...")
EndSelect
EndIf
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 19:43
von edel
Sendest du etwas an den Server, ist dieser erstmal damit beschaeftigt diesen auch zu
empfangen, der Server haengt dann erstmal bei ReceiveNetworkData. Und zwar solange
bis er damit fertig ist.
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 19:45
von shutdown27
ja das ist anscheinend das problem aber solange alle anderen clienten ruhig sind funktioniert es ja

Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 19:47
von HeX0R
edel hat geschrieben:Sendest du etwas an den Server, ist dieser erstmal damit beschaeftigt diesen auch zu
empfangen, der Server haengt dann erstmal bei ReceiveNetworkData. Und zwar solange
bis er damit fertig ist.
Ich schätze du meintest
ReceiveNetworkFile().
Das ist auch der Grund, warum man das nicht wirklich verwenden sollte.
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 20:15
von STARGÅTE
Wenn du wirklich große Dateien bzw. großen Mengen Daten verschicks,
dann musst du entweder Threads benutzen,
um das lange brauchende ReceiveNetworkFile auszulagern und NetworkServerEvent() nicht zu blockieren.
Oder du versendest die Dateien als Daten,
und empfängst auf der Serverseite die Dateien nur stückchenweise mit ReceiveNetworkData(),
sodass du dort oft genug NetworkServerEvent() aufrufen kannst, und die Ressourcen gleichmäßig verteils ...
Noch ein Hinweis:
Netzwerk-Daten-Übertragung ist immer wieder Gesprächsthema.
Benutze einfach die Suche des Forums, um weiterführende Infos und Tips und Code zu bekommen.
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 20:17
von edel
Eigentlich meinte ich ReceiveNetworkData, es nutzen doch beide die gleiche API?
Aber ich seh gerade das es sich irgendwie um 2 Fehlerbeschreibungen handelt. Oder ich hab den Wursttext falsch verstanden
Aber wenn es bei #PB_NetworkEvent_File haengen bleibt, heisst das ja, das nicht alle Daten empfangen wurden und der Server noch darauf wartet.
Das Problem kann man dann hier schoen sehen :
Server.pb
Code: Alles auswählen
PROCEDURE Main()
InitNetwork()
OpenConsole()
sid = CreateNetworkServer(0, 4321)
IF sid
PrintN("SERVER START")
REPEAT
event = NetworkServerEvent()
SELECT event
CASE #PB_NetworkEvent_Connect
PrintN("CONNECT")
CASE #PB_NetworkEvent_Disconnect
PrintN("DISCONNECT")
CASE #PB_NetworkEvent_Data
;ReceiveNetworkData(EventClient(), @long, 4)
PrintN("DATA")
ENDSELECT
Delay(1)
FOREVER
ENDIF
ENDPROCEDURE:Main()
client.pb
Code: Alles auswählen
PROCEDURE Main()
InitNetwork()
cid = OpenNetworkConnection("127.0.0.1", 4321)
IF cid
SendNetworkString(cid, Space(1))
Delay(4000)
ENDIF
ENDPROCEDURE:Main()
Entfernt man, bei dem Server, das Semikolon vor ReceiveNetworkData, funktioniert es sauber.
Re: server kann keine datei empfangen wenn mehrere clienten
Verfasst: 29.11.2010 20:26
von shutdown27
ich habe eine idee wenn ich
Code: Alles auswählen
repeat
until ReceiveNetworkFile(ClientID, "C:\"+GetFilePart(LastName))
sollte das klappen?
EDIT: hat nicht geklappt seber fehler wie vorher