UDP Prob

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Smily

Betreff: UDP Prob

BeitragSa, Dez 30, 2006 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
kann mir bitte jemand bei meinem kleinem Problem helfen?
Ich wollte mich jetzt nun auch mal an UDP wagen (ja das ist mein erster versuch ^^) und habe mal schnell ein Prog für client und server gemacht:

Client:
Code: [AUSKLAPPEN]
Getstream = CreateUDPStream(8001)
Sendstream = CreateUDPStream()

name$ = Input("name>")
ip$ = Input("ip>")

Graphics 800,600,16,2
WriteLine sendstream, "JOIN"
WriteLine Sendstream, name$
Repeat
 WriteLine Sendstream, "UPDATE"
 WriteLine sendstream, MouseX()
 WriteLine sendstream, MouseY()
 
 SendUDPMsg(sendstream,int_ip(ip$),8000)
 Cls
 Rect MouseX(), MouseY(), 10, 10
 Flip
Until KeyHit(1)

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]
Type player
 Field x
 Field y
 Field ip
 Field name$
 Field lastping
End Type


CountHostIPs(GetEnv("localhost"))
serverip$ = DottedIP(HostIP(1))

Getstream = CreateUDPStream(8000)
Sendstream = CreateUDPStream()

Graphics 800,600,16,2

Repeat
 Cls
 Text 0,0,serverip$
 ip = RecvUDPMsg(getstream) 
 If ip
  Repeat
   zeile$ = ReadLine(getstream)
   If zeile$ = "JOIN"
    player.player = New player
    player\ip = ip
    player\name$ = ReadLine(getstream)
    Print "Neuer Spieler: " + player\name$
   End If
   If Zeile$ = "UPDATE"
    For player.player = Each player
     If player\ip = ip Then Exit
    Next
    player\x = ReadLine(getstream)
    player\y = ReadLine(getstream)
    player\lastping = MilliSecs()
   End If
  Until Eof(getstream)
 End If
 For player.player = Each player
  Rect player\x, player\y,10,10
  Text player\x, player\y+15, player\name$
  Text player\x, player\y+30, DottedIP(player\ip)
  Text player\x, player\y+45, MilliSecs()-player\Lastping
 Next
 Flip
 ;If ip$ <> 0 Then Print ip$
Until KeyHit(1)


Wenn ich auf meinem eigenen PC den server und den Client starte, dann wird der Client auch vom Server erkannt.
Dann habe ich das Client-Prog aber mal von einem Freund auf einem anderen Computer ausführen lassen (Der Server lief immer noch bei mir)
Aber da hat der Server kein Signal vom Client bekommen.
Kann mir bitte jemand sagen, was ich falsch mach?

gruß, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

pixelshooter

BeitragSa, Dez 30, 2006 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
was war das für eine verbindung? LAN, INet, INet mit router etc?
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc

Smokie

BeitragSa, Dez 30, 2006 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du den Port für den Server freigeschaltet hast, dann liegt es daran, dass du 2 Streams pro Client und Server verwendest. Es reicht wenn du nur einen Stream für's senden und empfangen verwendest.
Code: [AUSKLAPPEN]


Stream = CreateudpStream(8000)
;...

if recvudpmsg(Stream) then

 writeline Stream,"Empfangen"
 Sendudpmsg Stream, udpmsgip(stream),udpmsgport(stream)

endif


Wenn du nur einen Stream benutzt muss du nur den Serverport freischalten. Ansonsten müsste der Client den Port den er zum Empfangen nimmt auch freischalten, und wenn du was größeres mit UDP pprogrammieren willst is das umständlich.

Grüße
Smokie
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Smily

BeitragSa, Dez 30, 2006 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ja ersmtal nur ein Testprogramm,
Ich möchte es später noch so ausbauen, dass auch daten vom Server an den Clienten geschickt werden.

Laut Robs BB-Kurs brauch ich dafür 2 seperate streams um daten zu senden und zu empfangen.

Wie schon gesagt ist diese materie noch relativ neu für mich.

Gruß, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Smokie

BeitragSa, Dez 30, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst aber nur einen, kannst im Forum suchen da steht's

Grüße
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Smily

BeitragSa, Dez 30, 2006 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
ok. Ich hab den Code jetzt so:

Client:
Code: [AUSKLAPPEN]
stream = CreateUDPStream(8001)

name$ = Input("name>")
ip$ = Input("ip>")

Graphics 800,600,16,2
WriteLine stream, "JOIN"
WriteLine stream, name$
SendUDPMsg(stream,int_ip(ip$),8000)
Text 0,0,"Warte auf ok vom server..."
Flip
Repeat
 IP = RecvUDPMsg(stream)
 If IP = int_ip(ip$)
  n$ = ReadLine(stream)
 End If
Until n$ = "OK"

Repeat
 WriteLine stream, "UPDATE"
 WriteLine stream, MouseX()
 WriteLine stream, MouseY()
 
 SendUDPMsg(stream,int_ip(ip$),8000)
 Cls
 Rect MouseX(), MouseY(), 10, 10
 Flip
Until KeyHit(1)

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]
Type player
 Field x
 Field y
 Field ip
 Field name$
 Field lastping
End Type


CountHostIPs(GetEnv("localhost"))
serverip$ = DottedIP(HostIP(1))

stream = CreateUDPStream(8000)

Graphics 800,600,16,2

Repeat
 Cls
 Text 0,0,serverip$
 ip = RecvUDPMsg(stream) 
 If ip
  Repeat
   zeile$ = ReadLine(stream)
   If zeile$ = "JOIN"
    player.player = New player
    player\ip = ip
    player\name$ = ReadLine(stream)
    Print "Neuer Spieler: " + player\name$
    Print "IP: " + IP + " (" + DottedIP(ip) + ")"
    WriteLine stream, "OK"
    SendUDPMsg(stream,ip,8001)
   End If
   If Zeile$ = "UPDATE"
    For player.player = Each player
     If player\ip = ip Then Exit
    Next
    player\x = ReadLine(stream)
    player\y = ReadLine(stream)
    player\lastping = MilliSecs()
   End If
  Until Eof(stream)
 End If
 For player.player = Each player
  Rect player\x, player\y,10,10
  Text player\x, player\y+15, player\name$
  Text player\x, player\y+30, DottedIP(player\ip)
  Text player\x, player\y+45, MilliSecs()-player\Lastping
 ; If MilliSecs()-player\lastping > 1000 Then Print player\name$ + " ping timeout": Delete player.player
 Next
 Flip
 ;If ip$ <> 0 Then Print ip$
Until KeyHit(1)


Leider habe ich immer noch das selbe Problem.
Wenn ich es Lokal teste, also server sowohl client auf einem pc, dann geht es.
Aber wenn der client von einem anderen computer aus startet gehts nicht.

@pixelshooter, ich sitz hier an einem Computer, der mittels LAN mit einem anderen verbunden ist, welcher wiederrum den Internetanschluss hat wenns das war was du wissen wolltest
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Smokie

BeitragSa, Dez 30, 2006 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
in BB wird groß und kleinschreibung nicht unterschieden, das heißt im Clientprogramm darfst du nicht IP und ip$ als 2 verschiedene Variablen behandeln.

Und wenn es dann nicht geht, muss du sicher gehen, dass die Ports im Router und in der Firewall freigeschalten sind und das Programm nicht geblockt wird.

Grüße

Edit: wenn ich das mit den beiden Variablen probiere kommt bei mir immer ein Fehler, weil ich ja sozusagen 2 mal intip für eine Variable anwende
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Smily

BeitragSa, Dez 30, 2006 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ooooops Embarassed
noobfehler würd' ich sagen ^^
Eigentlich weis ich das mit den Variablen. Hier hab ich wohl mal nicht aufgepasst Rolling Eyes
Peinlich, peinlich...
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group