UDP

  • Also ich hab schon ewig das Problem dass ich UDP einfach nicht hinbekomme ;(
    Bei mir funktioniert es nicht dass der Server sendet oder der Client empfängt entweder beides funktioniert nicht oder eines von Beiden ;)
    Hier die Skripte :
    Client :

    Spoiler anzeigen
    [autoit]

    UDPStartup ()

    [/autoit] [autoit][/autoit] [autoit]

    $Open = UDPOpen (@IPAddress1,28960,1)
    If @error <> 0 Then
    MsgBox (16,'','Error ;(')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    UDPSend ($Open,'ping')

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $Recv = UDPRecv ($Open,2048^2)
    Until $Recv <> ''
    MsgBox (0,"",$Recv)

    [/autoit]

    Server :

    Spoiler anzeigen
    [autoit]

    UDPStartup ()

    [/autoit] [autoit][/autoit] [autoit]

    $Bind = UDPBind (@IPAddress1,28960)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Recv = UDPRecv ($Bind,2048^2)
    If $Recv = 'ping' Then
    MsgBox (0,"",$Recv)
    UDPSend ($Bind,'back')
    EndIf
    WEnd

    [/autoit]


    hoffe ihr könnt helfen ;)

  • Du hast ja genau genommen 2 Server (=Empfänger) und 2 Clients(=Sender)
    Wenn du jetzt 2 Verbindungen (Pro Server und Client eine) aufbaust, kann der Datenfluss zwischen den beiden Scripten funktionieren.
    (so hatte ich das mit TCP gemacht)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • so, habs dir mal etwas umgeschrieben, und habs getestet, hatte sogar funktioniert:
    Server:

    Spoiler anzeigen
    [autoit]

    UDPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    $Bind = UDPBind(@IPAddress1, 28960)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Recv = UDPRecv($Bind, 500) ;p.s. 2048^2=4194302
    If $Recv = 'ping' Then
    MsgBox(0, "", $Recv)
    $Open = UDPOpen(@IPAddress1, 28960)
    If @error <> 0 Then
    MsgBox(16, '', 'Error ;(')
    Exit
    EndIf
    UDPSend($Open, 'ping')
    EndIf
    WEnd

    [/autoit]


    Client

    Spoiler anzeigen
    [autoit]

    UDPStartup ()

    [/autoit] [autoit][/autoit] [autoit]

    $Open = UDPOpen (@IPAddress1,28960)
    If @error <> 0 Then
    MsgBox (16,'','Error ;(')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    UDPSend ($Open,'ping')

    [/autoit] [autoit][/autoit] [autoit]

    $Bind = UDPBind (@IPAddress1,28960)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Recv = UDPRecv ($Bind,500) ;p.s. 2048^2=4194302
    If $Recv <> '' Then
    MsgBox(64,"incoming Message",$Recv)
    ExitLoop
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    UDPShutdown()

    [/autoit]

    Wobei das Server/Client ja eig. nicht zutrifft, da ja beide beides sind :D
    Edit:\\ XovoxKingdom war schneller... ich muss schneller arbeiten^^

  • Eben das ist das Problem , so hab ich das auch schon hinbekommen aber es ist umständlich im Gegensatz zu TCP und es kann iwie nicht sein dass das so funktioniert denn sonst müsste Ja Client und Server den Port geöffnet haben (bei Spielen z.B.) ;)

  • Du versuchst bei denem Server das Ping an

    [autoit]

    UDPBind (@IPAddress1,28960)

    [/autoit]

    zu senden, was aber nicht geht, weil du ja dann vorher

    [autoit]

    $Open = UDPOpen (@IPAddress1,28960)

    [/autoit]

    brauchst, und es daran senden musst. an UDPBind kannst du nix senden

  • Du verstehst mich nicht ganz ;(
    Wenn ich jedesmal ein Bind beim Client erstellen muss dann muss dieser eben auch einen Port freigeben und das ist ja leider nicht möglich ..
    Im Gegensatz zu TCP ist ja dann eig bei UDP jeder PC Client und Server in einem das ist ja mehr als unpraktisch ;(

  • sonst müsste Ja Client und Server den Port geöffnet haben (bei Spielen z.B.)


    mehr oder Weniger. Spiele rufen die Daten vom GameServer ab, und senden tun Sie ganz normal. Wie z.b. bei ICQ, läuft das alles über einen Externen Server. Du sendest eine nachricht an kontakt xy, der ICQ Client von xy guckt nach, ob auf dem ICQ Server neue nachrichten für ihn sind und lädt diese dann ggf. runter. und zeigt die dann an

    Beil sachen ohne Externen server wie peer2peer braucht man dann auch Portfreigaben

  • ...
    ICQ
    Client sendet an Server : Hallo.
    Server sendet an Client2 : Hallo.
    Client2 empfängt : Hallo.

    Verstehst du ?
    Bei ICQ hast du auch keinen Port freigegeben ^^

  • Server sendet an Client2 : Hallo.


    nicht ganz richtig.... Client2 fragt beim Server ob neue nachrichten da sind und lädt diese dann herunter

    Verstehst du ?
    Bei ICQ hast du auch keinen Port freigegeben


    jap, genau das wollte ich damit zum ausdruck bringen

  • Der lädt die doch nicht herunter ^^ der empfängt die ;) , da bin ich mir eigentlich relativ sicher ...

    Zitat

    jap, genau das wollte ich damit zum ausdruck bringen

    Also dann haben die das bei ICQ auch hingekriegt ohne dass der Client auch der Server ist :D Sonst müsste ich ja für ICQ einen Port öffnen :P

  • Zitat

    Der lädt die doch nicht herunter ^^ der empfängt die ;) , da bin ich mir eigentlich relativ sicher ...

    hmmm... soweit ich weiß, ist es so, das der Client2 beim ICQ Server abfragt ob er neue nachrichten hat, und die dann ggf. herunterlädt. kanns mir auch nicht anders vorstellen, aber lasse mich gerne eines besseren belehren ;)

  • Wie denn herunterladen ? mit INetGet oder was ^^

    Zitat

    beim ICQ Server abfragt ob er neue nachrichten hat

    Und wie frägt man ab ? :D
    Senden : Nachricht da ?
    Empfangen : Ja|Nein
    Und dann haben wir schon wieder das Empfangen wofür wir einen Port öffnen müssen ;)

  • Zitat

    vllt. downloadet er einfache eine nachrichten.txt, und wenn was drinnensteht, dann gibt er das aus

    Zu Zeit aufwändig un wo wäre da die Sicherheit ? :D bei ner öffentlichen Datei :D

  • Irgendwie verstehe ich dein Problem nicht richtig :S
    Du willst von PC1 zu PC2 eine Nachricht via UDP austauschen, also fungiert
    PC1 als Server (um auf Nachrichten zu warten)
    PC2 als Client (der dann die Nachricht schickt)
    ---------
    Wenn die Nachricht bei PC1 angekommen ist kann die Verbindung beendet und umgekehrt neu aufgebaut werden:
    PC2 wird Server (um die Auswertung der Nachricht von PC1 zu empfangen)
    PC1 wird Client (um PC2 die Auswertung zu schicken)
    ---------
    Sofern diese "Kommunikation" stattfindet sind beide PCs jeweils 1x Server und 1x Client.
    Sollte möglich sein über den selben Port zu laufen, jedoch nur mit Unterbrechung, damit der Wechsel von
    Server zu Client (bzw. andersrum) möglich ist.

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • @Xovox : Was soll das den bringen ?!
    Ich will einen einfachen Datenaustausch wie bei TCP , der Server fungiert als SERVER und der Client als CLIENT und nicht anders, oder Client als Server und Client dann muss man einen PORT FREIGEBEN , was ich vermeiden will ...
    Hoffe das kapiert jetzt jeder ... :cursing:

  • wo wäre da die Sicherheit


    Wer spricht denn von öffentlich? ich weiß nciht wie ICQ das macht aber möglich wäre FTP (auch wenn die es so nicht machen würden) z.b. mit Inetget und als Adresse: "ftp://" & $icqnummer & ":" & $pawwort & "@deinftp.de"


    Das ist Das, was ich oben geschrieben habe

    der Server fungiert als SERVER und der Client als CLIENT und nicht anders


    Du wiedersprichst dich. demnach kann nur einer senden und nur einer empfangen. du willst das aber anderes haben.

    Hoffe das kapiert jetzt jeder


    ja, das schon, aber es ist nunmal so, das das nur so geht, über einen Externen Server der als "dateiablage" bereitsteht

  • Jonathan : Spiele stellen auch keine externe Dateiablage oder wie auch immer du das nennst bereit ...
    Da gibt man beim Server den UDP Port frei und dann kann man auf dem Server als Client spielen und das läuft nur per UDP nicht noch mit PHP oder ner Dateiablage was du da "gelabert" hast :thumbdown: Da sendet und empfängt der Client ;) ebenso wie der Server :)
    Bei TCP funktioniert das ja .. aber bei UDP irgendwie nicht .. ;/

  • was du da "gelabert" hast :thumbdown:


    Weißt du, auf sowas reagiere ich garnicht gut :cursing:
    Ich habe dein Script berichtigt: Trifft zu
    Ich habe dir gesagt, wie das ohne Portfreigabe gehen kann: Trifft zu
    Du Dementierst meine Lösung, aber kannst selber nichts vorweisen: Trifft zu

    Bei TCP funktioniert das ja ..

    Ja, dann mach das doch per TCP meine Güte....