Netzwerkproblem

Anfängerfragen zum Programmieren mit PureBasic.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Netzwerkproblem

Beitrag von LifeSux »

Ich habe ein kleines Problem mit meinem neuen Netzwerkspielzeug...
Was ich will:
Mit einem Client mehrere Server anschreiben (oder öfter hintereinander den gleichen) und den nach der Verbindung vom Server gesendeten String in die Box schreiben. (Alte Daten bleiben erhalten)

Leider kann ich immer nur beim ersten Mal den String auswerten / etwas empfangen.

Hier mein ClientCode:

Code: Alles auswählen

;Netzwerkverbindung initialisieren
If InitNetwork() = 0
  MessageRequester("Error","Could not initialize the Network",0)
  End
EndIf

;Platz im Arbeitsspeicher reservieren für spätere Nachrichten
*Puffer = AllocateMemory(1000)

;Hauptfenster öffnen und Gadgets einzeichnen
If OpenWindow(0, 1, 1, 500, 260, "LH CC", #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
IPAddressGadget(0, 5, 5, 160,20)
SetGadgetState(0, MakeIPAddress(127,0,0,1))
ButtonGadget(2, 170, 5, 60, 20, "Get Hours")
EditorGadget(3, 1, 30, 497, 200, #PB_Editor_ReadOnly)
ButtonGadget(4, 395, 235, 100, 20, "Copy to Clipboard")

;Hauptschleife fürs Fenster
Repeat
EventID = WaitWindowEvent()

If EventID = #PB_Event_Gadget
  Select EventGadget()
    Case 2
       ConnectionID = OpenNetworkConnection(GetGadgetText(0),6565)
        Repeat
         CEvent = NetworkClientEvent(ConnectionID)
         If CEvent 
          Select CEvent
           Case 2
            a.l = a.l+1
            ReceiveNetworkData(ConnectionID,*Puffer,1000)
            AddGadgetItem(3, 1, "Projektor: " +GetGadgetText(0)+ " " +PeekS(*Puffer)) 
            Delay(10)
            CloseNetworkConnection(ConnectionID)
            CloseConnection.b = 1
            CEvent = 0
          EndSelect
         EndIf
         Delay(20)
        Until CloseConnection.b = 1
        
   
    Case 4
    
  EndSelect
EndIf




Until EventID = #PB_Event_CloseWindow
EndIf

;AddGadgetItem(0, a, "Line "+Str(a)) 
Und hier Server:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error","Could not initialize the Network shit...",#PB_MessageRequester_Ok)
  End
ElseIf OpenConsole() = 0
  MessageRequester("Error","Could not initialize the Console...",#PB_MessageRequester_Ok)
  End
ElseIf EnableGraphicalConsole(1) = 0
  MessageRequester("Error","Could not EnableGConsole...",#PB_MessageRequester_Ok)
  End
EndIf

*Puffer = AllocateMemory(1000)

Define IncomeMessage.s, Access.s, Verify.d, Why.s

If ReadFile(1,"Access.txt")
   While Eof(1) = 0
    Access.s = Access.s + " " +ReadString(1)
   Wend
  CloseFile(1)
EndIf

If CreateNetworkServer(1,6565)
  PrintN("Server was started...")
  PrintN("Running on Port 6565")
  PrintN("")
  ConsoleTitle("CAE LampHour CS")
  
  Repeat
  
  SEvent = NetworkServerEvent()
  
  If SEvent
  ClientID = EventClient()
  
  Select SEvent
    Case 1
      PrintN("A New Client has connected! "+Str(ClientID))
      PrintN("Sending lamp hours...")
      SendNetworkString(ClientID,"3sdwew32")
    Case 4
      PrintN("He disconnected...")
     EndSelect
  EndIf
  
  Delay(250)
  Until Quit = 1
 End
  

EndIf
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Das ist in deinem Fall kein Problem bei Netzwerk, sondern ein "normaler" Fehler bei den Variablen:

Bei dir steht :

Code: Alles auswählen

CloseConnection.b = 1
das die schleife beendet.

diese Variable wird aber nie wieder auf 0 gesetzt, dadurch wird die Schleife bei jedem weiteren "Anlaufen" sofort beendet!

ein CloseConnection = 0 nach dem Until CloseConnection.b = 1 würde das problem heben.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

noch eine Anmerkung:
es ist nicht nötig, als Flag ein Byte zu nehmen, das bietet keine Vorteile.
In manchen Fällen ist ein Byte sogar langsamer als die Basis-Registergröße,
und auf die 3 bzw. 7 Byte kommt es echt nicht an.
also, besser gleich

Code: Alles auswählen

CloseConnection.i = 1
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten