Erste UDP versuch

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Jo0oker

Betreff: Erste UDP versuch

BeitragMi, Jul 30, 2008 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich habe mal versucht, eine einfache UDP bverbindung aufzubauen.
Wenn ich nun den server starten, und dann im client versuche etwas abzuschicken, bekomme ich immer die Meldung: Stream dows not exist....
Wenn ich nur den clienten starte, bekomme ich keine fehlermeldung... woran liegt das?

Server:
Code: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()

;Streams
senderStream = CreateUDPStream(8001)
empfStream = CreateUDPStream(8000)



timer = CreateTimer(50)

While Not KeyHit(1)
Cls


If ReadAvail(empfStream) <> 0 Then

Print ReadLine(empfStream)

EndIf
WaitTimer(timer)
   

Flip
Wend


Client:
Code: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()

;Streams
senderStream = CreateUDPStream(8001)
empfStream = CreateUDPStream(8000)


IP_Adresse = INT_IP(Input$())

timer = CreateTimer(50)

While Not KeyHit(1)
Cls


WriteLine(senderStream, Input$())

   SendUDPMsg senderStream, IP_Adresse
WaitTimer(timer)

Flip
Wend



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


lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Eingeproggt

BeitragMi, Jul 30, 2008 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Startest du beide Programme auf einem Rechner?
Dann blockiert der Server den Port, somit kann der Client ned nen Stream drauf erstellen.
(Mal davon abgesehen, dass dein Code ned wirklich 100% sauber ist... Der Server sollte RecvUDPMsg ausführen und einen timer+Flip 1 anzuwenden macht wenig Sinn)

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Jo0oker

BeitragMi, Jul 30, 2008 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke,
jap, ich teste das ganze auf einem rechner...

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

TimBo

BeitragDo, Jul 31, 2008 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

is zwa n bisl spät aber vll. lieste das ja noch.
Wenn du das an einem PC versucht, dann benutze die IP 127.0.0.1 ansonsten die Lokale IP.

Viele Grüße
TImBo

Edit:
mhh der Sendestream sendet an Port 8001 und er Empfänger liest Port 8000 das funktioniert so nicht. ^^

Das muss so sein:
Server
Senden 8001
Empfangen 8000

Client
Senden 8000
Empfangen 8001

aber warum machst du mehere Streams? Wenn man alles Sauber ausließt geht auch locker ein Stream XD

Edit2: eingeproggt, du warst schneller ^^
  • Zuletzt bearbeitet von TimBo am Do, Jul 31, 2008 1:18, insgesamt 3-mal bearbeitet

Eingeproggt

BeitragDo, Jul 31, 2008 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm.. TimBo.. Bist du dir sicher, dass das hilft? zB schonmal selber versucht?
Natürlich ist 127.0.0.1 die lokale IP. Das ändert aber wenig daran, dass man nicht 2 Streams auf einem Port eröffnen kann, was versucht wird, wenn man es so in einem Programm vorgibt und dann das Programm zweimal startet Smile

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Tankbuster

BeitragDo, Jul 31, 2008 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Trick ist einfach


Programm 1:
Port = 8000
SendUDPMsg 8001

Programm 2:
Port = 8001
SendUDPMsg 8000

So brauch man nur einen Port/Programm.

Außerdem solltest du drauf achten, die IP in einen Integer umgewandelt zu haben (hast du wahrscheinlich schon)

Ich hoffe ich konnte Helfen.
MFG
Twitter
Download Jewel Snake!
Windows|Android

TimBo

BeitragDo, Jul 31, 2008 1:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

@ Tankbuster: genau das ist es XD

und er hat es schon

Zitat:

Code: [AUSKLAPPEN]
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



es gibt noch einen Besseren Trick

programm 1+2
port=8000
sendudpmsg 8000

wenn man die daten gescheit ausliest, ist alles gut ^^

mfg
TImBO
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Tankbuster

BeitragDo, Jul 31, 2008 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
TimBo hat Folgendes geschrieben:
Hi
es gibt noch einen Besseren Trick

programm 1+2
port=8000
sendudpmsg 8000

wenn man die daten gescheit ausliest, ist alles gut ^^

mfg
TImBO


Das geht nicht.
Twitter
Download Jewel Snake!
Windows|Android

TimBo

BeitragDo, Jul 31, 2008 1:41
Antworten mit Zitat
Benutzer-Profile anzeigen
nicht Shocked Laughing

lol mein 4-Gewinnt Bcc 14 oder so
da habe ich auch nur einen Stream beide öffnen Port 8000
aber das geht nicht, wenn man das programm am selben PC laufen hat.

Wenn man 2 PC's zur verfügung hat geht das mit einem Stream zu 100%!

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Eingeproggt

BeitragDo, Jul 31, 2008 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
aber das geht nicht, wenn man das programm am selben PC laufen hat.


Und genau darum gehts Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Jo0oker

BeitragDo, Jul 31, 2008 8:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke @all,
hier noch mal für andere der funktionierende code;
Code: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()
Flip
;Streams
senderStream = CreateUDPStream(8000)
empfStream = CreateUDPStream(8001)


IP_Adresse = INT_IP(Input$())

timer = CreateTimer(50)

While Not KeyHit(1)
Cls


WriteLine(senderStream, Input$())

   SendUDPMsg senderStream, IP_Adresse, 8000
WaitTimer(timer)

Flip
Wend



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


lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

marcelkroener

BeitragFr, Aug 01, 2008 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem meiner spiele hab ich
für client und server je einen port.
das funzt ohne probleme

tft

BeitragSa, Aug 02, 2008 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ...

wenn du es so machst....

Code: [AUSKLAPPEN]
      ip1=HostIP(1)
      ipaddress$ = DottedIP$(ip1);
      ;UdpID=MilliSecs()
      UdpIp$=ipaddress$
      UdpIntIp= INT_IP(UdpIp$)
      UdpStreamOut=CreateUDPStream()
      If UdpStreamOut=0 Then RuntimeError("Cant open UdpStreamOut")
      UdpPortOut=UDPStreamPort(UdpStreamOut)
      UdpStreamIn=CreateUDPStream()
      If UdpStreamIn=0 Then RuntimeError("Cant open UdpStreamIn")
      UdpPortIn=UDPStreamPort(UdpStreamIn)   


Dann must du dir über die Ports keine gedanken machen. Es werden dann automatisch frei Ports verwendet und du must diese nur noch benutzen.

UdpPortIn ist der Port für den Input
UdpPortOut der für den Ausgang

Das funktioniert auch an einem Rechner mit Host und Clients die Parralel laufen ganz gut.

Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group