UDP...
Übersicht

![]() |
JeanBetreff: UDP... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Also ich habe wieder ein kleines Problem mit UDP... und gleich werde ich wahnsinnig! Also ich verwende auf dem einen PC dieses Programm im Hintergrund: Code: [AUSKLAPPEN] senden = CreateUDPStream() If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf empfangen = CreateUDPStream() If empfangen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf Repeat IP_Adresse = RecvUDPMsg(empfangen) If IP_Adresse > 0 Then senderip = DottedIP(IP_Adresse) messenge$ = ReadLine(bekommen) Print "Nachricht empfangen!" Print "Sender Ip:" + senderip Print "Nachricht:" + messenge$ EndIf Forever Auf einem zweiten PC sende ich dann eine Nachricht... Code: [AUSKLAPPEN] senden = CreateUDPStream(0) If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf bekommen = CreateUDPStream(0) If bekommen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf IP_Adresse = 172965 WriteLine(senden, "Hallo") SendUDPMsg senden, IP_Adresse Print "Gesendet!" Aber beim empfänger erscheint dan nicht das gewünschte "Hallo" sondern rein garnichts... Kann es vielleicht auch daran liegen das ich an einem Router hänge? Zudem stimmt die IP Adresse zu 100%... Bitte Bitte Bitte Bitte Bitte helft mir! Sonst werde ich noch verrückt! |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch bei Port 0 sucht sich das System einen freien Port oberhalb von 1024 aus. Du musst also explizit angeben (am besten nur bei SendUDPMsg), an welchen Zielport du senden möchtest.
Weiter ist es nicht nötig einen Sende- und Empfangsstream zu erstellen. Es reicht ein einziger Stream aus. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Jean |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe den Code jetzt so abgeändert:
Empfänger: Code: [AUSKLAPPEN] senden = CreateUDPStream() If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf empfangen = CreateUDPStream() If empfangen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf Port=UDPStreamPort (empfangen) Print "Port: " + Port umwandeln$ = ip$() w1 = Instr(umwandeln$,".") w2 = Instr(umwandeln$,".",teil1+1) w3 = Instr(umwandeln$,".",teil2+1) IP = w1*$1000000+w2*$10000+w3*$100+w4 Print "IP: " + IP Repeat IP_Adresse = RecvUDPMsg(empfangen) If IP_Adresse > 0 Then senderip = DottedIP(IP_Adresse) messenge$ = ReadLine(bekommen) Print "Nachricht empfangen!" Print "Sender Ip:" + senderip Print "Nachricht:" + messenge$ EndIf Forever Function ip$(inte=0) ips=CountHostIPs("") ; Anzahl der offenen IPs am Computer auslesen. If Not ips Then Return 0 ; Wenn kein geöffnet, dann 0 zurück liefern. ip=HostIP(ips) ; Die IP als Integer von der momentane Verbindung rausfiltern. If inte=1 Then Return ip ; Wenn die Option inte gesetzt ist, dann wird die IP im form eines Integer zurück geliefert. ipstr$=DottedIP(ip) ; Im weiteren verlauf, falls die Option inte nicht gesetzt ist, das Integer in einen String umwandeln. Return ipstr$ ; Wert zurückliefern. End Function Sender: Code: [AUSKLAPPEN] senden = CreateUDPStream(0) If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf bekommen = CreateUDPStream(0) If bekommen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf IP_Adresse = Input$("Empfaenger IP: ") Port = Input$("Empfaenger Port: ") WriteLine(senden, "Hallo") SendUDPMsg senden, IP_Adresse, Port CloseUDPStream senden CloseUDPStream bekommen Print "Gesendet!" Aber es läuft immer noch nicht! Das ist so ein Scheiss! |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist großer quatsch den du da gemacht hast. 1. funktioniert deine Umwandlung von dotted IP in integer IP nicht und 2. seh selbst:
Code: [AUSKLAPPEN] Function IntIP(IP$)
CountHostIPs(IP$) Return HostIP(1) End Function So einfach ist es, dotted IPs in integer IPs umzuwandeln. Aber was rede ich da, https://www.blitzforum.de/viewtopic.php?t=9550 hier wird alles beschrieben. mfg olli |
||
vertex.dreamfall.at | GitHub |
- Zuletzt bearbeitet von Vertex am Sa, März 12, 2005 11:58, insgesamt einmal bearbeitet
![]() |
Jean |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Danke erstmal für deine Hilfe... aber wenn ich jetzt meine IntegerIP berechnen lassen will dann bekomme ich diese Zahl zurück: -1062731481 Und das kann doch nicht stimmen... oder? ![]() Bitte helft mir! ![]() |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
Probier es doch aus. Wen es klappt, dann weißt du das die Funktion richtig ist. Thx DarkAngel |
||
Deutscher Blitz Basic Chat |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nehmen wir mal die IP 192.168.2.100:
Binär sieht das dann so aus: 11000000.10101000.00000010.01100100 Ein Integerwert besteht aus 4 Byte also 4*8=32 Bit genausoviel wie eine IP hat. Integers sind in Blitz signed. Das heißt, es gibt negative Zahlen und auch positive Zahlen. Ob der Wert negativ oder positiv ist, bestimmt das erste Bit: 11000000.10101000.00000010.01100100 Ist das erste Bit gesetzt(also = 1), dann ist der absolute Wert der 31 folgenden Bits negativ, andern Falls positiv. In diesem Beispiel ist der Wert halt negativ. Deswegen kommen auch negative IPs zustande. Ist das selbe mit negativen Pixelfarben bei ReadPixel. Man sollte jedoch bei der IP Formatierung A.B.C.D bleiben, denn das lässt sich eben besser merken. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Jean |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin
Also langsam verzweifle ich... ich habe das jetzt so gecodet: Empfänger: Code: [AUSKLAPPEN] senden = CreateUDPStream() If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf empfangen = CreateUDPStream() If empfangen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf Port=UDPStreamPort (empfangen) Print "Port: " + Port umwandeln$ = ip$(1) Print "IP: " + umwandeln$ Repeat IP_Adresse = RecvUDPMsg(empfangen) If IP_Adresse > 0 Then senderip = DottedIP(IP_Adresse) messenge$ = ReadLine(bekommen) Print "Nachricht empfangen!" Print "Sender Ip:" + senderip Print "Nachricht:" + messenge$ EndIf Forever Function ip$(inte=0) ips=CountHostIPs("") ; Anzahl der offenen IPs am Computer auslesen. If Not ips Then Return 0 ; Wenn kein geöffnet, dann 0 zurück liefern. ip=HostIP(ips) ; Die IP als Integer von der momentane Verbindung rausfiltern. If inte=1 Then Return ip ; Wenn die Option inte gesetzt ist, dann wird die IP im form eines Integer zurück geliefert. ipstr$=DottedIP(ip) ; Im weiteren verlauf, falls die Option inte nicht gesetzt ist, das Integer in einen String umwandeln. Return ipstr$ ; Wert zurückliefern. End Function Sender: Code: [AUSKLAPPEN] senden = CreateUDPStream(0) If senden = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf bekommen = CreateUDPStream(0) If bekommen = 0 Then Print "Verbindung konnte nicht erstellt werden!" EndIf IP_Adresse = Input$("Empfaenger IP: ") Port = Input$("Empfaenger Port: ") WriteLine(senden, "Hallo") SendUDPMsg senden, IP_Adresse, Port CloseUDPStream senden CloseUDPStream bekommen Print "Gesendet!" Aber es geht immer noch nicht! Und ich schreibe auch alles 100% genau ab... Bitte Bitte Bitte helft mir! P.S. Ich habe irgendwie das gefühl das etwas mit der Schleife nich stimmt... denn bei meinem Router blinken die Led`s nicht welche mir sonst den Datentransfer angeben... komisch! |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier habe ich dir mal ein funktionierendes Beispiel geschrieben:
Host.bb Code: [AUSKLAPPEN] Print "Host"
Print "" Port = Int(Input$("Port: ")) Stream = CreateUDPStream(Port) While Not KeyDown(1) IP = RecvUDPMsg(Stream) If IP Then Print "Nachricht von "+DottedIP$(IP)+":" Print ">"+ReadLine$(Stream) Print "" WriteLine Stream, "re, es ist "+CurrentTime$() SendUDPMsg Stream, IP, UDPMsgPort(Stream) EndIf Wend CloseUDPStream Stream End Client.bb Code: [AUSKLAPPEN] Print "Client"
Print "" ServerPort = Int(Input$("Server Port: ")) ServerIP = IntIP(Input$("Server IP: ")) Stream = CreateUDPStream() Print "Mein Port: "+UDPStreamPort(Stream) Print "" While True Message$ = Input$("Nachricht: ") Print "" If Message$ = "quit" Then WriteLine Stream, "und tschüss" SendUDPMsg Stream, ServerIP, ServerPort Exit Else WriteLine Stream, Message$ SendUDPMsg Stream, ServerIP, ServerPort EndIf Repeat IP = RecvUDPMsg(Stream) If IP Then Print "Nachricht von "+DottedIP$(IP)+":" Print ">"+ReadLine$(Stream) Print "" EndIf Until IP Wend CloseUDPStream Stream End Function IntIP(IP$) CountHostIPs(IP$) Return HostIP(1) End Function Was ist zu machen? Als erstes den Host starten(= Server) und gibst den Port 1234 ein. Dann startest du den Client, und gibst als Server Port 1234 sowie als Server IP 127.0.0.1 an. Nun kannst du halt Nachrichten hin und her senden. Beim Router ist es wichtig die verwendeten UDP Ports freizugeben. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Jean |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wooooooooooooooooooooooooooooooooooooooooooow!
Es geht juhuuuuuuuuuu! THX ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||
Mau |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mal eine Frage zum Beispiel von Vertex: dem Server (Host) wird ja hier ein manuelles Port zugewiesen (daß dieser halt vorher freischalten muß). Der Client aber benutzt einen willkürlichen Port. Ist es also völlig egal, ob beim Client ein Router im Weg ist? Auch wenn der Client nicht nur sendet, sondern auch vom Host empfängt? Muß man sich also NUR um die Freischaltung des Host-Ports Sorgen machen?
Da ich selbst keinen Router nutze, blicke ich da noch nicht so ganz durch. |
||
Alles muss, nichts kann! |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe nicht, warum sich manche Leute imer noch den (unnötigen) Aufwand machen und ALLES selbstcoden müssen. Wofür gibt es denn die genialen Libs wie BlitzPlay?
Such einfach mal danach. Ich finde, es erleichtert dir einiges... |
||
Mau |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab die BlitzPlay hier auf der Platte -aber ich würde auch gerne VERSTEHEN wie etwas funktioniert, wenn's recht ist. | ||
Alles muss, nichts kann! |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Problem. Wollte dich nur darauf hinweisen, entschuldige bitte meinen vielleicht etwas aggressiven Ton von eben ![]() |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
@mau
ja, nur der host muss die benötigten Ports im Router freischalten. die erklärung habe ich glaube ich schon mind. 2 mal hier im Forum geschrieben und auch schon von anderen gelsen, also werde ich es nicht noch mal erläutern, vor allem weil ich auch auf dem Sprung bin, also mal die suchmaschiene anschmeißen, denke da wirst du fündig. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Mau |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist dir auch schon mal aufgefallen, daß zum Thema UDP fast jeder etwas anderes sagt? Gerade WEIL ich die Suche benutzt habe und mich durch 60(!) Threads gekämpft habe, bin ich ja verwirrter als vorher. Aber du hast es ja gerade beantwortet. | ||
Alles muss, nichts kann! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group