Was ist hier falsch? ( TCP )

  • 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

    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
    Alles anzeigen


    Client:
    Spoiler anzeigen

    AutoIt

    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

    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
    Alles anzeigen
    Server

    AutoIt

    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
    Alles anzeigen

    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 ()

Webutation