Problem mit UDP

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

The Yeti

Betreff: Problem mit UDP

BeitragSo, Sep 05, 2004 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieser Code hier steht vor dem Beginn meiner Haupt(spiel)schleife.
Zuvor wurde die Variable "online" durch den Spieler auf 0 (oflline), 1 (hosten) oder 2 (joinen) gesetzt.
Dieses Codestück sollte eigentlich die Streams erstellen (funktioniert) und auf dem HostPC soll das Bild "warte" gezeigt werden, bis der andere Rechner ihm eine Nachricht schickt. Die Funtion INT_IP hab ich aus der Onlinehilfe (sie soll IP´s aus der xxx.xx.xxx.xx Form in eine Integer umwandeln).
Im Moment sieht der Effekt des ganzen aber so aus, dass das Wartebild nicht weggeht (die Message nicht ankommt?). Vielleicht könnt ihr mir ja helfen:

Code: [AUSKLAPPEN]
If online=1
senden=CreateUDPStream()
empfang=CreateUDPStream(8000)
Cls
DrawBlock warte,0,0
Flip
Repeat
joined=RecvUDPMsg(empfang)
If KeyHit(1)
online=0
Exit
EndIf
If joined<>0
ip=joined
Exit
EndIf
Forever
EndIf

If online=2
Color 255,255,255
dotip$=Input("IP des Hosts: ")
ip=INT_IP(dotip$)
Color 0,0,0
senden=CreateUDPStream()
empfang=CreateUDPStream(8000)
WriteLine(senden,"los")
SendUDPMsg senden, ip, 8000
EndIf

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


Thx, im Vorraus

PS: Falls ihr keinen Fehler seht, sagt´s bitte auch, dann mus ich ihn wo anders suchen Wink .

Jolinah

BeitragSo, Sep 05, 2004 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie ich das sehe zeichnest du das Bild ja auch immer, egal was passiert. Ausserdem hast du ne Schleife die sich immer wiederholt. Du setzt wenn man ESC drückt online auf 0, aber die Schleife wird dennoch nicht abgebrochen wenn online 0 ist. Wie beendest du das Programm eigentlich? Oder dann hab ich etwas übersehen.

Eigentlich brauchst du auch nur 1 Stream, nicht 2. Da man über den Stream sowohl Empfangen als auch senden kann.

Ich kann dir ja mal ein Beispiel machen und es nachher posten.

Jolinah

BeitragSo, Sep 05, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
So sollte es funktionieren:
Da du aber danach wohl weitermachen willst solltest du statt das Programm zu beenden ne Weitere Schleife einbauen oder die erste Schleife abändern.

Code: [AUSKLAPPEN]

Graphics 1024,768,0,1
SetBuffer BackBuffer()

online = Input("Host(1),Joint(2): ")

If online = 1

   udp = CreateUDPStream(8000)
   If udp = 0 Then End

   Color 255,255,0

   Repeat
      Cls
      
      Text 512, 384,"Bitte warten...",1,1
      
      ip = RecvUDPMsg(udp)
      If ip <> 0
         message = ReadByte(udp)
         
         Select message
            Case 1
               joined = True
               name$ = ReadString$(udp)
            Default
         End Select
         
      EndIf
      
      Flip
   Until joined = True Or KeyHit(1)

   End
   
ElseIf online = 2

   udp = CreateUDPStream()
   If udp = 0 Then End
   
   dotip$ = Input("IP: ")
   
   WriteByte(udp,1) ;Joine message
   WriteString(udp,"Jolinah") ;Name
   SendUDPMsg udp, INT_IP(dotip$), 8000

   End
   
EndIf
   
   
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

The Yeti

BeitragSo, Sep 05, 2004 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Schleife müsste eigentlich schon durchbrochen werden, da ich einCode: [AUSKLAPPEN]
Exit
da stehen habe? Ich guck mir aber trozdem mal deine Version an.
 

denial

BeitragSo, Sep 05, 2004 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

also ich hab auch Probleme mit UDP, hab aber deinen Code, Jolinah ausprobiert, und es hat geklappt.... Hab n Chat gecodet, bei dem Der Client dem Host MSGs schicken kann. Allerdings weiß ich nicht, wie ich es hinkrieg, dass der Host dem Client etwas schicken kann, weil da irgendwie nichts passiert... Hab als Destination_IP die IP angegeben, die RecvUDPMsg als Rückgabe liefert..
Oder brauch ich einen zweiten UDP Stream? Normalerweise nicht, oder?

Danke

Jolinah

BeitragSo, Sep 05, 2004 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte öfter das Problem das die IP die RecvUDPMsg zurückgeliefert hatte nicht funktioniert hat. Es gibt noch eine andere Funktion die die IP der aktuell gesendeten Message zurückgibt. Und mit der ist es bei mir bis jetzt immer gegangen:

Code: [AUSKLAPPEN]

UdpMsgIP()
UdpMsgPort()


Damit bekommst du IP und Port.
 

denial

BeitragSo, Sep 05, 2004 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke geht Smile
Und danke auch an den Thread-Ersteller, durch den dieser Code erstmal zu Tage gekommen ist Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group