Chatprogramm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

Wow danke für die ganzen Tipps :allright:
Bloss beim starten kommt bei deinem PrintN: PrintN(PeekS(*Buffer, Length)
Immer ein Fehler: PrintN() : Incorrect number of parameters!

Ausserdem wieso soll ich Event 4 überprüfen, wenn es den gar nicht gibt :shock: ??

Mein Quelltext sieht jetzt so aus:
;###########
NewList Clients.l()
;##############
OpenConsole()

ConsoleTitle("Server")
ConsoleColor (15, 0)



If InitNetwork() = 0
PrintN("Konnte Netzwerk nicht finden !")
End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(Port)

PrintN("Server wurder erstellt (Port "+Str(Port)+").")

Repeat

SEvent.l = NetworkServerEvent()

If SEvent

ClientID = NetworkClientID()

Select SEvent

Case 1
PrintN("Ein neuer Client hat sich angemeldet !")
;#################
AddElement(Clients())
Clients() = NetworkClientID()
;###################
Case 2
Length.l = ReceiveNetworkData(NetworkClientID(), Buffer, 1000)


PrintN(PeekS(*Buffer, Length)
ForEach Clients()
If Clients() <> ClientID
SendNetworkString(Clients(), PeekS(Buffer, Length))
EndIf
Next




Case 3
PrintN("Client "+ Str(ClientID) + " hat die Verbindung beendet...")





EndSelect
EndIf

Until Quit = 1

PrintN("Klicke zum beenden des Servers.")
Input()
CloseNetworkServer()
Else
PrintN("Konnte Server nicht erstellen (Wird der Port bereits benutzt ?).")
EndIf


End
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

in der zeile bei der er meckert hast du eine schließende klammer vergessen.
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:

Beitrag von HeX0R »

Ausserdem wieso soll ich Event 4 überprüfen, wenn es den gar nicht gibt
Vielleicht solltest du die Hilfe zu NetworkServerEvent() nochmals genauer lesen, oder die Brille putzen...
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

Jawoll habs jetzt mit dem Case verstanden! Funzt jetzt auch so weit!
Aber der Server schickt es immer noch nich an alle Clients weiter!
Liegts am Client?

Client:

Code: Alles auswählen

OpenConsole()                                              
 
ConsoleTitle("Client")                              
ConsoleColor (15, 0)


If InitNetwork() = 0
   PrintN("Kein Netzwerk gefunden!")
  End
EndIf


Port = 6832
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)


PrintN("Willkommen zu NextConextion!")
PrintN("")
Delay(2000)
Print("Verbindung wird hergestellt")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
PrintN(".")
PrintN("")

If ConnectionID
  PrintN("Client ist verbunden mit Server...")
  Delay(1000)
  ClearConsole ()

PrintN("Willkommen zum Chat!")
PrintN("")
     
Repeat
     
   
PrintN("")
string$ = Input ()
SendNetworkString(ConnectionID, String$)


 



     
    SEvent.l = NetworkServerEvent()
 
    If SEvent
   
      ClientID = NetworkClientID()
 
      Select SEvent
     
           
        
        
        Case 2
          Length.l = ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
          
          
          PrintN(PeekS(Buffer, Length))



 
      EndSelect
   EndIf








     
   
ForEver
  

Else
  PrintN("Konnte Server nicht finden!")
EndIf

Input ()
  
End
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:

Beitrag von HeX0R »

HeX0R hat geschrieben: Da deine CLients aber im Input() festhängen und keinerlei Signale vom Server auswerten, wirst du trotzdem nie ne Meldung kriegen!
Das sollte deine Frage klären

Input() is dafür ned wirklich sinnvoll... es wird ja quasi nix anderes ausgeführt, bis der User mal irgendwann Return gedrückt hat

Ausserdem kann der Client mit NetworkServerEvent() nix anfangen... besser wäre NetworkClientEvent(ConnectionID)
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

OK habs verändert!
Aber was nehme ich denn anstatt von Print?

Hier der Code:

Code: Alles auswählen

OpenConsole()                                             
 
ConsoleTitle("Client")                             
ConsoleColor (15, 0)


If InitNetwork() = 0
   PrintN("Kein Netzwerk gefunden!")
  End
EndIf


Port = 6832
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)


PrintN("Willkommen zu NextConextion!")
PrintN("")
Delay(2000)
Print("Verbindung wird hergestellt")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
PrintN(".")
PrintN("")

If ConnectionID
  PrintN("Client ist verbunden mit Server...")
  Delay(1000)
  ClearConsole ()

PrintN("Willkommen zum Chat!")
PrintN("")
     
Repeat
     
   
PrintN("")
string$ = Input ()
SendNetworkString(ConnectionID, String$)


 



     
clientEvent.l = NetworkClientEvent(ConnectionID)
 
    If SEvent
   
      ClientID = NetworkClientID()
 
      Select SEvent
     
           
       
       
        Case 2
          Length.l = ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
         
         
          PrintN(PeekS(Buffer, Length))



 
      EndSelect
   EndIf








     
   
ForEver
 

Else
  PrintN("Konnte Server nicht finden!")
EndIf

Input ()
 
End  
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:

Beitrag von HeX0R »

Hmm... also nix für Ungut, aber hier sin doch vieel zu vieele Lücken im Verständnis vorhanden!

Es scheint, als würdest du alles (und das auch noch ab und an falsch) aus unseren Hilfen zusammenkopieren, ohne auch nur irgendwann den Versuch zu starten irgendwas davon zu verstehen...

Ich für meinen Teil bin aus dieser "Fütterung" erst mal raus, was nu nicht heissen soll, ich würde Anfänger nicht versuchen zu unterstützen!
Aber unterstützen und vorkauen sind nu mal doch recht unterschiedliche Dinge...

Viel Glück mit deinem Chat!

Gruss
HeX
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

HeX0R hat geschrieben:Es scheint, als würdest du alles (und das auch noch ab und an falsch) aus unseren Hilfen zusammenkopieren, ohne auch nur irgendwann den Versuch zu starten irgendwas davon zu verstehen...
Dem kann ich nur zustimmen. Es ist für den Anfang vielleicht doch etwas zu schwer ein Chat-Programm zu schreiben. Falls du es trotzdem weiter versuchen möchtest, Print() solltest du durch PrintN() ersetzen, sonst kommt alles auf der gleichen Zeile (hintereinander).
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

Ohh man! Tut mir ja leid, dass ich die ganzen Codes nicht auswendig kann!
Ich kann ja jetzt nachvollziehn!
Tut mir leid wenn ich mcih schwer mache :(

Aber wir haben es doch jetzt so weit geschafft, könnt ihr mir jetzt nicht noch einmal beim client helfen???
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> könnt ihr mir jetzt nicht noch einmal beim client helfen???

na, ich weiss nicht, wie ich's finden soll, dass Du die Benutzer gleich zweier
Boards (das Pureboard und die Lounge) mit diesem Problem auf Trab hälst.
/:->

Sicherlich ist man hier wie dort gewillt, Dir zu helfen, doch dadurch, dass die
einen Helfer nichts von den anderen wissen verursachst Du unnötige
Mehrarbeit. Das ist so nicht korrekt.

Grüße ... Kiffi
Antworten