Netzwerkprogramm läuft bei 2 usern nicht mehr

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Luus

Betreff: Netzwerkprogramm läuft bei 2 usern nicht mehr

BeitragMi, Jul 23, 2008 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
also ich hab nen server, der die aktuelle mausposition vom client mit nem quadrat anzeigt, programmiert. das klappt auch alles soweit ganz gut, nur sobald nen zweiter client dazukommt macht der server nichts mehr, so als ob er keine daten mehr bekommt.

ich hab keine ahnung woran das liegt und hoffe, dass ihr mir helfen könnt.

danke im vorraus
Luus

DAK

BeitragMi, Jul 23, 2008 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ohne code geht da wenig...
Gewinner der 6. und der 68. BlitzCodeCompo
 

Luus

BeitragMi, Jul 23, 2008 0:55
Antworten mit Zitat
Benutzer-Profile anzeigen
client:
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
Global frametimer = CreateTimer(5)
ip$ = Input("IP:")
udp = CreateUDPStream()
If Not udp Then
   Print "error"
EndIf
SeedRnd MilliSecs()
Global playerx
Global playery
WriteByte(udp,0)
SendUDPMsg udp,INT_IP(ip$),6112
Repeat
playerx = playerx+MouseXSpeed()
playery = playery+MouseYSpeed()
WriteByte(udp,1)
WriteString(udp,playerx)
WriteString(udp,playery)
SendUDPMsg udp,INT_IP(ip$),6112
Text 0,0,playerx
Text 0,10,playery
Flip
Cls
Until KeyHit(1)
End

Function INT_IP(IP$)
a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a4=Int(IP$)

Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function


server:
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SeedRnd MilliSecs()
Type client
Field color_red$
Field color_green$
Field color_blue$
Field playerx
Field playery
Field ip,port
End Type


SetBuffer BackBuffer()
udp = CreateUDPStream(6112)
If Not udp Then
   Print "error"
EndIf


Repeat
   If RecvUDPMsg(udp) <> 0 Then
      client_ip = UDPMsgIP(udp)
      client_port = UDPMsgPort(udp)
      
      message = ReadByte (udp)
      Select message
         Case 0
            c.client = New client
            c\ip = client_ip
            c\port = client_port
            c\color_red$ = Rnd(0,255)
            c\color_green$ = Rnd(0,255)
            c\color_blue$ = Rnd(0,255)
            c\playerx = 0
            c\playery = 0
         Case 1
            For c.client = Each client
               If c\ip = client_ip Then
                  c\playerx = ReadString(udp)
                  c\playery = ReadString(udp)
               EndIf
            Next
      End Select
   EndIf
   For c2.client = Each client
      Color c2\color_red$,c2\color_green$,c2\color_blue$
      Rect c2\playerx,c2\playery,25,25
   Next
   Flip
   Cls
Until KeyHit(1)
End

ToeB

BeitragMi, Jul 23, 2008 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich rate immer noch dazu, ein Prgramm zu machen... Das ist viel Übersichtliger und man kann besser das senden und empfangen nachvollziehen.

Sonst guck ich mir deinen code mal an... Schreib dann nochwas...

Edit : Schreibe nie "SendUDPMsg udp,INT_IP(IP$),port", weil wenn es aufgerufen wird, rechnet der immer beim senden die IP aus, das verlangsamt sich seeeehr. Speicher das dierect in einer Varaible (IP% = INT_IP(Input("IP:")) )

Edit2 : Jetzt weiß ich woran das liegt mit dem Server :
Du sendest mit dem Client immer und immer wieder (jeden schleifen druchgang) eine nachricht. Soweit so gut. Da der Server ungefähr genau so viele schleifen durchgäge hat wie der Client, kann er sie problemlos hintereinander anbfragen. Kommt aber ein 2. Client dazu, kompliziert sich das ganze. Der sendet nämlich jetzt auch jeden schleifen durchgang. Und die sachen muss der Server dann alle verarbeiten. Tipp : Baue bei den Clienten einen Sende-Timer ein, Also :
Code: [AUSKLAPPEN]
If SENDE_MS <= Millisecs() - 25 then ;Wenn 25 Millisekunden vorüber sínd...
;Senden
SENDE_MS = Millisecs() ;Wieder zurück setzten...
EndIf


Nochwas : schreibe bei "Print error" das der das programm beenden soll, weil sonst gibts wirklich nen error...


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group