Seite 1 von 7

Netzwerk

Verfasst: 10.02.2007 23:13
von Pandorra
Hi, ich bin wieder.
ich hab ein Problem mit dem Netzwerk.
Ich will eine Variable verschicken, sie dann in den Speicher laden und lesen.

( als Datei und dann auf die Festplatte packen wäre ja so wie das Laden)

Hier der Code vom Server:

Code: Alles auswählen

  
  If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port, #PB_Network_TCP)

Repeat
      
    Event = NetworkServerEvent()
  
    If Event
    
      ClientID = EventClient()
  
      Select Event
        
        Case 1
        ReceiveNetworkData(ClientID, Buffer, 20)

        
        Case 2
        ReceiveNetworkData(ClientID, Buffer, 30)

        
        Case 3
        SendNetworkString(ClientID, Str(Spieler1x))
        
        Case 4
        SendNetworkString(ClientID, Str(Spieler1z))
        
        Case 5
        SendNetworkString(ClientID, Str(Spieler2x))
        
        Case 6
        SendNetworkString(ClientID, Str(Spieler2z))



      EndSelect
    EndIf
;... (Hauptcode( am ende auch mit Until))
Client ( dort klappt es nicht):

Code: Alles auswählen

 If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
  EndIf


Port = 6832

Repeat


ConnectionID = OpenNetworkConnection("192.168.178.22", Port)
Select ConnectionID
  
  Case 1
  SendNetworkString(ConnectionID, Str(Spieler2x))
  
  Case 2
  SendNetworkString(ConnectionID, Str(Spieler2z))
  
  Case 3
  ReceiveNetworkData(ClientID, Buffer, 20)

  
  Case 4
  ReceiveNetworkData(ClientID, Buffer, 30)

  
  Case 5
  ReceiveNetworkData(ClientID, Buffer, 40)

  
  Case 6
  ReceiveNetworkData(ClientID, Buffer, 50)

  
EndSelect
So ich will nun die Variable Spieler... dort einlesen, wie mach ich das?
(Wenn ich es als Datei speichern würde, würde ich es so laden:

Code: Alles auswählen

      If ReadFile(0,"...")     
           Spieler1x = Val(ReadString(0)) 
           Spieler1z = Val(ReadString(0)) 
           
           CloseFile(0)                
      Else
          MessageRequester("Information","Konnte Datei nicht öffnen!")
      EndIf
    EndIf
hoffentlich kann mir jemand helfen.


Die Geschichte der Büchse Pandora( Büchse nicht die der Frau Pandora)
http://de.wikipedia.org/wiki/Pandora

Verfasst: 11.02.2007 00:20
von Scarabol
Sorry aber ich versteh deine Absicht noch nicht so richtig.

Wieso machst du beim Client ne Select Abfrage zur ConnectionID?
Du kannst auf Server Seite doch einfach die empfangene Variable in eine neue Speichern oder nicht?

Gruß
Scarabol

Verfasst: 11.02.2007 00:46
von STARGÅTE
dieser bereich
Repeat


ConnectionID = OpenNetworkConnection("192.168.178.22", Port)
Select ConnectionID
ist völlig falsch

1. OpenNetworkConnection() ist immer außerhalt einer Schleife und muss nicht dauernd aufgerufen werden
2. Select ConnectionID , liefert nicht 1,2,3,4.... sonder eine ID
3. du brauchst auf der Clientseite auch eine NetworkClientEvent abfrage

außerdem ist glaube ich deine interpretation von NetworkServerEvent() falsch, denn die liefert dir nur 1 (Neuer Client) 2 (Daten kommen an) 3 (Datei kommt an) 4 (Cleint geht) und nicht 5 oder 6

Verfasst: 11.02.2007 10:01
von Pandorra
danke für die antworten.

:oops: Habe gedacht das Case für die Reihenfolge ist.
Ist klar, dass das dann nicht funktioniert ich schreib es gleich mal um.. :oops:

Außerdem hab ich auch noch einen Fehler gemacht

Code: Alles auswählen

  Case 3
  ReceiveNetworkData(ClientID, Buffer, 20)

 
  Case 4
  ReceiveNetworkData(ClientID, Buffer, 30)

 
  Case 5
  ReceiveNetworkData(ClientID, Buffer, 40)

 
  Case 6
  ReceiveNetworkData(ClientID, Buffer, 50) 
Ich hab geschrieben ClientID anstatt Conection ID.
Aber wie kann ich die Variablen einlesen?

Verfasst: 12.02.2007 19:38
von Pandorra
sorry für den Doppelpost.

So ich hatte noch eine Frage wie kann ich Variablen aus dem Speicher einlesen?
Aus einer Datei ist es ja einfacher, aber aus dem Speicher?
Wie gesagt am besten nur Tipps, möglichs wenig Code.

Verfasst: 12.02.2007 19:48
von PMV
aus dem Speicher ... nur Tipps ... mal überlegen ...
Wichtige "Operanden": * und @
Speicherzugriff mittels Peek und Poke

Die PB-Hilfe ist da auch für brauchbar :D

Aber was hast du genau vor?
Wert in den Speicher einlesen
Wert aus dem Speicher lesen

MFG PMV

Verfasst: 12.02.2007 20:10
von Pandorra
also wenn die Beschreibung beim Examples Ordner stimmt lade ich mittels

Code: Alles auswählen

 ReceiveNetworkData(Client, Buffer, Länge) 
Den Empfangenen String vom Clienten in den Speicher ein.
Aber wie kann ich ihn dann einlesen also benutzen.
Als beispiel:
Der Client sendet Spieler22x = 200 und Spieler22y = 300, dann will ich die gesendeten Variablen in den Server einladen, damit die neue Position rauskommt. (Ähnlich wie beim Laden von Spielständen)

Verfasst: 12.02.2007 20:18
von PMV
auslesen :wink:

wie ich schon schreib ... Peek() ist da sehr nützlich :D
bzw für Strings PeekS()

Sendet der Server den kompletten String "Spieler22x = 200" und
"Spieler22y = 300"?

MFG PMV

Verfasst: 12.02.2007 20:23
von Pandorra
danke für den Tipp, bau ich gleich mal ein.
(war nur ein beispielt für die Cordinaten. Obwohl eigntlich schreib ich nur

Code: Alles auswählen

 Global Spieler22x.f, Spieler22y.f
Der Client sendet Spieler22x und Spieler22y, dann will ich die gesendeten Variablen in den Server einladen, damit die neue Position rauskommt.

Verfasst: 12.02.2007 20:51
von PMV
Also sendet er zwei Float-Zahlen?
PeekF() :D

Aber ich denke, dein Spiel soll am ende über Netzwerk mehr als nur die
Spieler-Position übergeben, oder? Daher musst du dir, je nach dem was
alles gesendet werden kann, ein "Protokoll" überlegen. So das du
anhand des Inhalts des Empfangenden sagen kannst, was für Daten das
genau sind, um damit entsprechend um gehen zu können.

MFG PMV