Was ist hier falsch? ( TCP )

    • [ offen ]

      Was ist hier falsch? ( TCP )

      Tach zusamm.

      Ich versuch mich grad in sachen TCP, kapier aber i.wie recht wenig. Die Hilfe ist zwar in dem Thema sehr ausführlich, jedoch etwas verwirrend...

      Hab mal 2 Scripte gemacht ( Server und Client ).

      Der server enthält eine GUI mit 2 Inputboxen.
      Eine ist zur eingabe eines Textes die andere zur eingabe der IP, zu der verbunden werden soll.

      Der Client soll diesen Text empfangen und ihn in einem ToolTip wiedergeben.

      aber i.wie scheiter ich andauernd... ;(

      Achja: Kann man die Fehlercodes, die @error zurückgibt i.wo sehn, alsow enn jetz z.B 10049 als
      Fehlercode kommt, muss ich ja auch wissen, für was das steht.

      Also hier mal die 2 Scripte:

      Server:
      Spoiler anzeigen

      AutoIt-Quellcode

      1. Global $IpAddress = @IPAddress1 ;==> Gibt deine IP zurück.
      2. TCPStartup ()
      3. GUICreate ("TCP/IP Server", 200, 165)
      4. GUISetBkColor (0xFFFF00)
      5. GUISetState ()
      6. GUICtrlCreateLabel ("Hier den Text eingeben.", 10, 10, 180)
      7. $Input1 = GUICtrlCreateInput ("", 10, 30, 180)
      8. GUICtrlCreateLabel ("An welche IP soll gesendet werden?", 10, 60, 180)
      9. $Input2 = GUICtrlCreateInput ("", 10, 80, 180)
      10. $Button1 = GUICtrlCreateButton ("Senden", 10, 130, 180)
      11. While 1
      12. $msg = GUIGetMsg ()
      13. Switch $msg
      14. Case -3
      15. Exit
      16. Case $Button1
      17. _Send ()
      18. EndSwitch
      19. WEnd
      20. Func _Send ()
      21. $MainSocket = TCPConnect (GUICtrlRead ($Input2), "9000")
      22. If $MainSocket <= 0 Then
      23. MsgBox (16, "Fehler", "Felercode: " & @error)
      24. Else
      25. TCPSend ($MainSocket, GUICtrlRead ($Input1))
      26. EndIf
      27. EndFunc ;==> _Send


      Client:
      Spoiler anzeigen

      AutoIt-Quellcode

      1. TCPStartup ()
      2. $MainSocket = TCPListen (@IPAddress1, 9000)
      3. While 1
      4. $ConnectSocket = TCPConnect ("192.168.1.3", 9000)
      5. $Connect = TCPAccept ($MainSocket)
      6. If $Connect >= 0 Then
      7. $recv = TCPRecv ($Connect, 2048)
      8. TrayTip ("Empfangener Text:", $recv, 10)
      9. EndIf
      10. WEnd


      Wäre nett, wenn mir da einer weiterhelfen könnt ^^

      MfG

      Hab mir deinen Code nicht angesehen, aber hier mal ein paar Fehlercodes

      Spoiler anzeigen
      Socketfehler: Diese Liste erhebt keinen Anspruch auf Vollständigkeit
      Name Code Bedeutung

      WSAEINTR 10004 Aufruf wurde abgebrochen
      WSAEBADF 10009
      WSAEACCES 10013 Zugriffsfehler
      WSAEFAULT 10014 Parameter sind falsch
      WSAEINVAL 10022 1. Andere Funktion muß vorher aufgerufen werden
      2. Socket ist schon an Adresse gebunden
      3. Socket noch nicht an Adresse gebunden bzw. schon verbunden
      WSAEMFILE 10024 Resourcen fehlen (Dateien, Warteschlangen)
      WSAEWOULDBLOCK 10035 Aufruf würde blockieren
      WSAEINPROGRESS 10036 Parallele Aufrufe nicht erlaubt
      WSAEALREADY 10037 Abgebrochene Routine trotzdem schon fertig
      WSAENOTSOCK 10038 Kein gültiger Socket angegeben
      WSAEDESTADDRREQ 10039 Zieladresse benötigt
      WSAEMSGSIZE 10040 Datagram zu groß, wurde abgeschnitten
      WSAEPROTOTYPE 10041
      WSAENOPROTOOPT 10042 Unbekannte Socket-Option
      WSAEPROTONOSUPPORT 10043 Protokoll wird nicht unterstützt
      WSAESOCKTNOSUPPORT 10044 Sockettyp wird in angegebener Adressfamilie nicht unterstützt
      WSAEOPNOTSUPP 10045 Dieser Sockettyp wird nicht unterstützt
      WSAEPFNOSUPPORT 10046 Protokollfamilie wird nicht unterstützt
      WSAEAFNOSUPPORT 10047 Adressfamilie wird nicht unterstützt
      WSAEADDRINUSE 10048 IP-Adresse bzw. Port werden schon/noch benutzt
      WSAEADDRNOTAVAIL 10049 Port/Adresse nicht verfügbar
      WSAENETDOWN 10050 Netzwerk reagiert nicht
      WSAENETUNREACH 10051 Netzwerk kann nicht erreicht werden
      WSAENETRESET 10052 Verbindung durch TCP/IP zurückgesetzt
      WSAECONNABORTED 10053 Verbindung durch TCP/IP abgebrochen
      WSAECONNRESET 10054 Partner hat Verbindung zurückgesetzt
      WSAENOBUFS 10055 Resourcen fehlen (Interner Pufferspeicher)
      WSAEISCONN 10056 Socket ist schon verbunden
      WSAENOTCONN 10057 Socket ist noch nicht verbunden
      WSAESHUTDOWN 10058 Andere Seite hat Verbindung einseitig beendet
      WSAETOOMANYREFS 10059
      WSAETIMEDOUT 10060 Aufruf dauert zu lange, daher Abbruch
      WSAECONNREFUSED 10061 Angerufener möchte keinen Verbindungsaufbau
      WSAELOOP 10062
      WSAENAMETOOLONG 10063
      WSAEHOSTDOWN 10064
      WSAEHOSTUNREACH 10065 Host nicht erreicbar
      WSAENOTEMPTY 10066
      WSAEPROCLIM 10067
      WSAEUSERS 10068
      WSAEDQUOT 10069
      WSAESTALE 10070
      WSAEREMOTE 10071
      WSASYSNOTREADY 10091 Netzwerk nicht zur Kommunikation bereit
      WSAVERNOTSUPPORTED 10092 gewünschte Winsock-Version wird nicht unterstützt
      WSANOTINITIALISED 10093 Socket.Initialize muß aufgerufen werden
      WSAHOST_NOT_FOUND 11001 DNS-Server nicht gefunden
      WSATRY_AGAIN 11002 Gesuchter Rechner nicht gefunden
      WSANO_RECOVERY 11003 Nicht behebbarer Fehler
      WSANO_DATA 11004 Keine Namensdaten vorhanden
      WSANO_ADDRESS 11004


      Ich hoffe, das sind die richtigen ;)
      Englisch: msdn.microsoft.com/en-us/library/ms740668%28VS.85%29.aspx
      (TCPStartUp sagt: @error wie WSAStartup auf MSDN. Also bei msdn zu WSAStartup gehen und auf eine der Fehlerkonstanten geklickt ;) )
      Deutsch: support.microsoft.com/kb/819124/de
      (eine der Kosntanten bei google eingegeben und nur Seiten auf deutsch suchen)

      "Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
      Antworten auf Hilfegesuche per PN werden nicht garantiert.
      Hmm, erst mal: der Empfänder ist immer der Server. Der Client baut die Verbindung zu Sever auf, nicht umgekehrt ;)
      Dann solltest du die Sockets immer schließen:
      Client

      AutoIt-Quellcode

      1. Global $IpAddress = @IPAddress1 ;==> Gibt deine IP zurück.
      2. TCPStartup ()
      3. GUICreate ("TCP/IP Client", 200, 165)
      4. GUISetBkColor (0xFFFF00)
      5. GUISetState ()
      6. GUICtrlCreateLabel ("Hier den Text eingeben.", 10, 10, 180)
      7. $Input1 = GUICtrlCreateInput ("", 10, 30, 180)
      8. GUICtrlCreateLabel ("An welche IP soll gesendet werden?", 10, 60, 180)
      9. $Input2 = GUICtrlCreateInput ($IpAddress, 10, 80, 180)
      10. $Button1 = GUICtrlCreateButton ("Senden", 10, 130, 180)
      11. While 1
      12. $msg = GUIGetMsg ()
      13. Switch $msg
      14. Case -3
      15. Exit
      16. Case $Button1
      17. _Send ()
      18. EndSwitch
      19. WEnd
      20. Func _Send ()
      21. $MainSocket = TCPConnect (GUICtrlRead ($Input2), 9000)
      22. If $MainSocket <= 0 Then
      23. MsgBox (16, "Fehler", "Felercode: " & @error)
      24. Else
      25. TCPSend ($MainSocket, GUICtrlRead ($Input1))
      26. TCPCloseSocket($MainSocket)
      27. EndIf
      28. EndFunc ;==> _Send
      Server

      AutoIt-Quellcode

      1. TCPStartup ()
      2. $MainSocket = TCPListen (@IPAddress1, 9000)
      3. While 1
      4. ;~ $ConnectSocket = TCPConnect ("192.168.1.3", 9000)
      5. $Connect = TCPAccept ($MainSocket)
      6. If $Connect >= 0 Then
      7. Do
      8. $recv = TCPRecv ($Connect, 2048)
      9. Until $recv Or @error
      10. TrayTip ("Empfangener Text:", $recv, 10)
      11. TCPCloseSocket($Connect)
      12. EndIf
      13. WEnd

      Und der server muss warten, bis er etwas empfängt. TCPRecv blockiert nicht, bis etwas kommt.

      "Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
      Antworten auf Hilfegesuche per PN werden nicht garantiert.
      Ahhh, super ^^

      Ich dachte bis jetz immer, das es umgedreht ist, wieder was dazu gelernt ^^

      Vielen dank dafür. :thumbup:



      Mein Ziel ist ein recht großes Projekt, wobei ich bestimmt noch so einige male eure Hilfe in Anspruch nehmen
      muss.

      Ich will eine Art SuperChat Programm machen. ^^

      Also ihr müsst euch da so vorstellen.

      Man hat eine Große GUI.
      Dort kann man dann einen neuen Server erstellen.
      Man kann Servername und Passwort eingeben.

      Auf diesen Server sollen dann auch andere Leute drauf gehn können.
      Also sowas ähnliches wie TeamSpeak. Nur eben ohne Mikro ^^.

      Mal gucken, wie sich das am besten lösen lässt. entweder mach ichs mit TCP oda mit meinem FTP Server.

      Ihr könnt auch ruhig schonmal tipps geben, die mir später weiter helfen könnten ^^



      MfG

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Commander21“ ()

    autoit.de Webutation