tcp problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Puccini

Betreff: tcp problem

BeitragMi, Apr 02, 2008 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich bin grad dabei für mein Spiel ein server-client-programm zu schreiben.
Dabei will ich einen Server haben, welcher alle Clients verwaltet und halt ein Client-Programm welches sich dann mit dem server connected.

Wenn ich den Server auf meinem Rechner starte und dann den client geht alles.
Doch wenn ich noch einen Client startet kommt es zu fehlern beim senden und beide clients verlieren den server.....
auch wenn ich einen client auf meinem rechner und den 2. aufeinem anderen starte bricht alles ab..

was mach ich da falsch?

hier mal code-snippez vom server:

Code: [AUSKLAPPEN]
global server_stream%=CreateTCPServer(netport%)
      If server_stream%=0 RuntimeError("Server konnte nicht erstellt werden!")

While Not KeyHit(1)

; -------------------------------------------------------      Neuer Stream      
   stream=AcceptTCPStream(server_stream%)
   If stream
         tmpip$=DottedIP(TCPStreamIP(stream))
         tmpport%=TCPStreamPort(stream)
         tmpname$=ReadString(stream)
         
         msg_to_all(0,stream,tmpname$)
            p.player=New player
                                ......
   EndIf

; -------------------------------------------------------      alle Clients auf neue Daten untersuchen      
   For p.player=Each player      
      getbytes%=ReadAvail(p\stream)
      If getbytes%
         While ReadAvail(p\stream)
            msgtyp%=ReadInt(p\stream)
            Select msgtyp%
               Case 1      ;Ping
                  p\ms=MilliSecs()
            End Select
         Wend
      EndIf
   Next

; -------------------------------------------------------      alle Clients mit neuen Daten versorgen      
   If MilliSecs()-last_send_time>200
      For p.player= Each player
            WriteInt(p\stream,3)
            WriteInt(p\stream,p\stream)
         For pp.player=Each player
            If p\stream<>pp\stream
               WriteInt(pp\stream,20)
               WriteInt(p\stream,p\stream)
               WriteInt(p\stream,p\x)
               WriteInt(p\stream,p\y)
            End If
         Next
      Next
      last_send_time=MilliSecs()
   EndIf
wend

CloseTCPServer(server_stream)
End

Function msg_to_all(typ%,aktivstream,p1=0,p2=0,p3=0)
         For p.player=Each player
            If Not aktivstream=p\stream
               WriteInt(p\stream,typ%)
               Select typ
                  Case 0      ;Neuer Spieler
                     WriteInt(p\stream,aktivstream)         
                     WriteString(p\stream,p1)
                  Case 1      ;Spieler disconnect
                     WriteInt(p\stream,aktivstream)
                  Case 2      ;Spieler timeout
                     WriteInt(p\stream,aktivstream)
               End Select
            End If
         Next
End Function



So, ich hab einiges weggelassen, aber so is der server aufgebaut...

und hier der client:

Code: [AUSKLAPPEN]
   stream=OpenTCPStream(ip,8000)
   
   If stream=0 RuntimeError("Kein Server gefunden")
    WriteString(stream,name$)

While Not KeyHit(1)
;----------------------------------------------      Daten empfangen
   While ReadAvail(stream)
      typ%=ReadInt(stream)
      tmpstream=ReadInt(stream)
      Select typ%         
         Case 0      ;neuer Player
            tmpname$=ReadString(stream)
            add_msg tmpname$+" connected"
            p.player=New player
                                ....
      End Select
   
   Wend

;----------------------------------------------------------      Daten senden   
      ;Send Ping um aktiv zu bleiben
      If MilliSecs()-last_send_time>200          
         WriteInt(stream,1)
         last_send_time=MilliSecs()
      EndIf

Wend

CloseTCPStream(stream)


So, das mal imgroben vom Code!
Wenn es jemandem hilf kann ich auch den code komplett online stellen! aber es wird speedtext verwendet! also sollte man diese dll dann auch haben.

Danke für eure HIlfe.
MfG puccini
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39
 

Dreamora

BeitragMi, Apr 02, 2008 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
und wo speicherst du die stream handles genau? im player type oder so?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Puccini

BeitragMi, Apr 02, 2008 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
genau Very Happy

warte,

hier is es Very Happy
im server:
Code: [AUSKLAPPEN]
Type player
   Field stream
   Field ip$,port%
   Field ping%,ms%
   Field name$
   Field x%,y%
End Type

; -------------------------------------------------------      Neuer Stream      
   stream=AcceptTCPStream(server_stream%)
   If stream
   
         tmpip$=DottedIP(TCPStreamIP(stream))
         tmpport%=TCPStreamPort(stream)
         tmpname$=ReadString(stream)
         
         msg_to_all(0,stream,tmpname$)
            p.player=New player
               p\stream=stream
               p\ip$=tmpip$
               p\port%=tmpport%
               p\ms%=MilliSecs()
               p\ping%=0
               p\name$=tmpname$
               new_lok(p\name$+" connected. IP: "+p\ip$)
               playeranz=playeranz+1      
   EndIf



Very Happy
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group