server meldet disconnect nicht

Für allgemeine Fragen zur Programmierung mit PureBasic.
BitchBird
Beiträge: 17
Registriert: 09.11.2004 10:29

server meldet disconnect nicht

Beitrag von BitchBird »

ich habe einen minichat zu testzwecken programmiert. läuft alles wunderbar, nur eine sache will partout nicht klappen: wenn der client closenetworkconnection(ConnectionID) nutzt, zeigt der Server dies einfach nicht an.

server:

Code: Alles auswählen

InitNetwork()

OpenConsole()

  ConsoleColor(15,0)
  
  PrintN("Server 1.0")
  PrintN("**********")
  PrintN("")

  Print("Port : ")
  port.l = Val(Input())
  PrintN("")
  PrintN("_____")

CreateNetworkServer(port)
  
  *read_buf = AllocateMemory(1024)

Repeat
 
  ConsoleColor(15,0)
  
  taste$ = Inkey()
  
  If Left(taste$,1) = Chr(9)
    ConsoleColor(12,0)
    Print("Text : ")
    SendNetworkString(NetworkClientID(),Input())
    PrintN("")
  EndIf
  
  If NetworkServerEvent() = 1
    PrintN("Neuer Client!")
    PrintN("_____")
  EndIf
 
  If NetworkServerEvent() = 4
    PrintN("Client left!")
    PrintN("_____")
  EndIf
  
  If NetworkServerEvent() = 2
    ConsoleColor(10,0)
    Repeat
      client_id = NetworkClientID()
      bytes_rec = ReceiveNetworkData(client_id, *read_buf, 1024)
      Print("Incoming : " + PeekS(*read_buf,bytes_rec))
    Until(bytes_rec < 1024)
    PrintN("")
  EndIf
  
  Delay(10)

Until Left(taste$, 1) = Chr(27)

CloseNetworkServer()

CloseConsole() 
client:

Code: Alles auswählen

InitNetwork()

OpenConsole()

  ConsoleColor(15,0)
  
  *read_buf = AllocateMemory(1024)
  
  PrintN("Client 1.0")
  PrintN("**********")
  PrintN("")
  
  Print("IP : ")
  ip.s = Input()
  PrintN("")
  
  Print("Port : ")
  port.l = Val(Input())
  PrintN("")
  PrintN("_____")
  
  ConnectionID = OpenNetworkConnection("127.0.0.1",port)
  
  Repeat
 
  ConsoleColor(15,0)
  
  taste$ = Inkey()

  If Left(taste$,1) = Chr(9)
    ConsoleColor(12,0)
    Print("Text : ")
    SendNetworkString(ConnectionID,Input())
    PrintN("")
  EndIf
  
  If NetworkClientEvent(ConnectionID) = 2
    ConsoleColor(10,0)
    Repeat
      bytes_rec = ReceiveNetworkData(ConnectionID, *read_buf, 1024)
      Print("Incoming : " + PeekS(*read_buf,bytes_rec))
    Until(bytes_rec < 1024)
    PrintN("")
  EndIf
  
  Delay(10)
  
  Until Left(taste$, 1) = Chr(27)
  
  CloseNetworkConnection(ConnectionID)
  
CloseConsole()
jemand eine idee?
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Höhö, ich mußt auch erst überlegen... machs so:

Code: Alles auswählen

NSE = NetworkServerEvent()
If NSE = 1
ElseIf NSE = 2
ElseIf NSE = 4
...
So müßts dann funzen.

Du frägst in einem Schleifendurchgang 3 mal einen Serverevent ab. Natürlich wird dann immer nur bei der ersten Abfrage ein Wert <> 0 zurückgegeben... Alles klar?
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag von sbehrens »

CSprengel hat geschrieben:

Code: Alles auswählen

NSE = NetworkServerEvent()
If NSE = 1
ElseIf NSE = 2
ElseIf NSE = 4
...
So müßts dann funzen.
Besser (schöner, ob schneller weiß ich nicht :?:) :

Code: Alles auswählen

Select NSE
Case 1
...
Case 2
...
Case 4
...
enjoy life... while you can!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

angeblich langsamer, genauso übersichtlich...
...also höchstens "schöner" :mrgreen:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten