probleme mit RecvUDPMsg beim UDP chat

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

ZAiMoN

Betreff: probleme mit RecvUDPMsg beim UDP chat

BeitragSo, März 21, 2004 1:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal hier der code... wollte einfach mal einen simplen chat programmieren. Das problem liegt bei RecvUDPMsg die funktion müsste eigentlich die ip addresse des anderen haben aber das tut sie nicht. Deswegen habe ich eine andere variable für genommen "port". Jetzt müssen aber beide nutzer die IP des anderen kennen.... was sehr umständlich ist.
Könnt ihr mir vielleicht sagen was hier falsch ist?



Code: [AUSKLAPPEN]

Graphics 640,480,16,2

sende_stream = CreateUDPStream(8000)
empfangs_stream = CreateUDPStream(8001)



ip_count=CountHostIPs(GetEnv("localhost"))
For i=1 To ip_count
Print "Eigene IP: " + DottedIP(HostIP(1))
Next

Print "Gib die IP der Person ein die den Clienten hat: "
IP_String$ = Input$("-")
IP_Adresse = Int_IP(IP_String$)
Cls
Print "Verbunden mit: " + IP_String$



Repeat
port = RecvUDPMsg(empfangs_stream)
If port <> 0 Then
  eingang$ = ReadLine(empfangs_stream)
  Print "-" + eingang$
EndIf
 

ausgang$=Input$("-")
WriteLine(sende_stream, ausgang$)
SendUDPMsg sende_stream, IP_Adresse, 8000
Until ausgang$ ="quit"
End

;--------------------------------------
; FUNCTION: INT_IP(IP$)

Function Int_IP(IP$)
a1=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a2=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a3=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a4=val(IP$)
Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function

;--------------------------------------
; FUNCTION: VAL(STRING$)

Function val(String$)
ac=String$
Return String$
End Function
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Jolinah

Betreff: Re: probleme mit RecvUDPMsg beim UDP chat

BeitragSo, März 21, 2004 2:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die IP herauszufinden gibts auch noch ne Funktion: UDPMsgIP(stream), für den Port ebenso: UDPMsgPort(stream).


Versuch mal:

Code: [AUSKLAPPEN]
sende_stream = CreateUDPStream()
empfangs_stream = CreateUDPStream(8000)


So sucht er sich zum senden selber den besten Port.
Und den empfangs_stream hab ich in 8000 geändert weil du ja schliesslich weiter unten auch an 8000 sendest. Ansonsten würdest du an den Sende Stream senden was dir nicht viel bringt da du auf dem Port ja nichts ausliest.

Ich würde eh nur 1 Stream benutzen, das verwirrt nur mit 2 verschiedenen Streams.

Code: [AUSKLAPPEN]
udp = CreateUDPStream(8000)

Dann lesen und schreiben immer in den selben Stream, und schreiben immer auf Port 8000.

Ok, hier nochmal das komplette, hat zumindest bei mir lokal funktioniert.

Code: [AUSKLAPPEN]

Graphics 640,480,16,2

udp = CreateUDPStream(8000)



ip_count=CountHostIPs(GetEnv("localhost"))
For i=1 To ip_count
Print "Eigene IP: " + DottedIP(HostIP(1))
Next

Print "Gib die IP der Person ein die den Clienten hat: "
IP_String$ = Input$("-")
IP_Adresse = Int_IP(IP_String$)
Cls
Print "Verbunden mit: " + IP_String$



Repeat
port = RecvUDPMsg(udp)
If port <> 0 Then
eingang$ = ReadLine(udp)
Print "-" + eingang$
EndIf


ausgang$=Input$("-")
WriteLine(udp, ausgang$)
SendUDPMsg udp, IP_Adresse, 8000
Until ausgang$ ="quit"
End

;--------------------------------------
; FUNCTION: INT_IP(IP$)

Function Int_IP(IP$)
a1=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a2=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a3=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a4=val(IP$)
Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function

;--------------------------------------
; FUNCTION: VAL(STRING$)

Function val(String$)
ac=String$
Return String$
End Function
 

ZAiMoN

BeitragSo, März 21, 2004 3:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ehm wenn der benutzer auch noch gleichzeitig was anderes am machen ist kann das doch zu problemen führen wenn die ports net feststehen ...

aber irgend wie hat das meine frage nicht beantwortet zu RecvUDPMsg

da müsste doch theoretisch die IP und der Port mitgeliefert werden nur warum funzt das net ?
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Jolinah

BeitragSo, März 21, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
In meinem Beispiel wird der Port ja auch festgelegt. Aber einfach nur 1 Stream statt zwei.

RecvUDPMsg liefert nur die IP zurück. Und zwar eine Integer IP (kann auch eine minus Zahl sein), keine String IP im Format "xxx.xxx.xxx.xxx"


Allerdings kann es sein das die Funktion irgendwie nicht richtig funktioniert hat? Denn wieso gibt es seit irgend nem Patch die UDPMsgIP() Funktion?

Ich würde es so machen:

Code: [AUSKLAPPEN]

If RecvUDPMsg(stream) <> 0
  ip = UDPMsgIP(stream)
  port = UDPMsgPort(stream)

  text$ = ReadLine$(stream)
  ;.... usw....

Endif
 

ZAiMoN

BeitragSo, März 21, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ja so hab ich es auch schon gemacht danke Razz

aber IP_Adresse ist doch Integer nur IP_String$ ist eine zeichenkette
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Jolinah

BeitragSo, März 21, 2004 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, so kannst umwandeln.
Bzw. Du hast es in deinem Code ja schon richtig umgewandelt von String nach Int, aber so kannst du wieder zurück in String wandeln.

Code: [AUSKLAPPEN]

IP_String$ = DottedIP$(IP_Adresse)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group