server kann keine datei empfangen wenn mehrere clienten da s

Anfängerfragen zum Programmieren mit PureBasic.
shutdown27
Beiträge: 15
Registriert: 28.08.2010 15:58
Kontaktdaten:

server kann keine datei empfangen wenn mehrere clienten da s

Beitrag 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?
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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 :shock:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag von STARGÅTE »

Code bitte!

Ansonsten können wir nicht detailiert weiterhelfen.

Zur Clientunterscheidung gibt es auf der Serverseite: EventClient()
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
shutdown27
Beiträge: 15
Registriert: 28.08.2010 15:58
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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    
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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.
shutdown27
Beiträge: 15
Registriert: 28.08.2010 15:58
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag von shutdown27 »

ja das ist anscheinend das problem aber solange alle anderen clienten ruhig sind funktioniert es ja :)
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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.
shutdown27
Beiträge: 15
Registriert: 28.08.2010 15:58
Kontaktdaten:

Re: server kann keine datei empfangen wenn mehrere clienten

Beitrag 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
Antworten