Minimessenger will nicht laufen

  • N'abend,

    kleine Vorgeschichte (nicht essentiell zur beantwortung der Frage): Unser Faxgerät steht im Keller - das Büro ist allerdings im 1.OG. Wenn nun ein Faxs reinkommt soll der Rechner im Büro eine kleine Mitteilung erhalten (Dieser ist fast ausschließlich an um z.B. E-Mails abzurufen). Im Keller steht ein PC, über den eine kleine Nachricht (manuell) an den Büro-Rechner geschickt werden soll, sodass dieser bei dringlichkeit sofort - sonst demnächst irgendwann die Faxe abholen kann. Per Telefon ist das zum einem etwas nervig (wenn es auch mit ein "paar Klicks" zu erledigen wäre - außerdem herrscht sowieso schon ein starker Andrang am Telefon und ist daher meist besetzt.

    So nun zur Frage: Was mache ich falsch?! Ich habe die beiden Programme (s.u.) auf dem jeweiligem Rechner gestartet. Portfreigabe/Firewalleinstellungen, etc. sind bereits vorher gemacht worden. Ich erhalte immerzu den selben Fehler beim senden:

    Spoiler anzeigen

    WSAENOTCONN 10057
    Socket is not connected. A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using sendto) no address was supplied. Any other type of operation might also return this error—for example, setsockopt setting SO_KEEPALIVE if the connection has been reset.


    Falls ihr zufällig 2 Rechner in eurem Haushalt stehen habt (oder mehr :D) und ihr vielleicht mal schauen könnt, ob es bei euch klappt, wäre ich euch sehr verbunden. Vielleicht sieht jemand auch sofort den Fehler? Ich konnte mir nicht mehr weiterhelfen :( Hab es mit anderen Skripten vergichen, zig Änderungen gemacht, aber ich komm einfach nicht dahinter...

    Sender:

    Spoiler anzeigen
    [autoit]

    Global $1 = 1
    Global $IP
    Global $Connect
    Global $Socket
    $IP = InputBox("IP", "IP des anderen:", "192.168.0.55")
    TCPStartup()
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    $Connect = TCPConnect($IP, 6221)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    While $1=1
    $Text = InputBox("Text", "Die Nachricht")
    If @error Then
    $1=0
    EndIf
    If $Text <> "" Then
    $Socket = TCPListen(@IPAddress1, 6222)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    TCPSend($Socket, $Text)
    If @error Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    EndIf
    WEnd

    [/autoit]

    Empfänger:

    Spoiler anzeigen
    [autoit]

    #include <iNet.au3>
    TCPStartup()
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    Global $Socket = TCPListen(@IPAddress1, 6221)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    While 1
    Global $SMsg = TCPAccept($Socket)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    If $SMsg >0 Then
    Global $Msg = TCPRecv($SMsg, 9999)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    If $Msg <> "" Then
    Global $eingehendeIP = SockettoIP($SMsg)
    Global $name = _TCPIpToName($eingehendeIP)
    MsgBox(0, "Nachricht", $name & " schrieb folgendes an dich:" & @CRLF & $Msg)
    EndIf
    EndIf
    WEnd

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

    #Region Func
    Func SocketToIP($SHOCKET) ;== Ip des Senders erhalten s. Hilfe "Function Reference TCPRecv"
    Local $sockaddr, $aRet
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
    EndFunc
    #EndRegion Func

    [/autoit]

    Vielen Dank
    Aquaplant

  • haha, erster, EIN WUNDER!!! :rofl:

    Sender
    [autoit]

    Global $IP
    Global $Connect = -1 ;erstmal das TCPConnect auf -1 setzen
    Global $Socket
    $IP = InputBox("IP", "IP des anderen:", "192.168.0.55")
    TCPStartup()
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    Do
    $Connect = TCPConnect($IP, 6221);damit er es solange macht, bis er auch eine connection hat...
    Until $Connect <> -1 ;machen wir das in eine Do ... Until Schleife
    ;die @error abfrage ersparen wir uns damit ;)
    While 1 ;die Variable $1 wird hier nicht benötigt (siehe Zeile 15)
    $Text = InputBox("Text", "Die Nachricht")
    If @error = 1 Then ;wenn der Abbrechen button gedrückt wird dann...
    Exit ;beendet er das programm, damit die InputBox nicht immer wieder kommt
    EndIf
    If $Text <> "" Then ;TCPListen KANN nichts senden, NUR empfangen.... ok?
    TCPSend($Connect, $Text);das wird über TCPConnect gesendet, anders gehts mitn senden via TCP nicht ^^
    EndIf
    WEnd ;Fertig ist der Sender, hab 8 Zeilen entfernt, 2 zeilen neugemacht und 2 Variablen verändert :D

    [/autoit]
    Empfänger
    [autoit]

    #include <iNet.au3>
    Global $Msg, $accept, $eingehendeIP, $name, $Socket ;ich finde, das wenn man die Variablen mit Global deklariert, sollte man dies am anfang, nach den includes tun ^^
    TCPStartup()
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    $Socket = TCPListen(@IPAddress1, 6221)
    If @error = -1 Then
    MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
    EndIf
    Do
    $accept = TCPAccept($Socket);hier, wie beim Sender warten, bis eine verbindung entsteht
    Until $accept <> -1
    While 1
    $Msg = TCPRecv($accept, 9999);ich habe die TCPAccept variable verändert, also auch die hier
    If $Msg <> "" Then;hier der error weg ^^
    $eingehendeIP = SockettoIP($accept)
    $name = _TCPIpToName($eingehendeIP)
    MsgBox(0, "Nachricht", $name & " schrieb folgendes an dich:" & @CRLF & $Msg)
    EndIf
    WEnd
    ;das hier drunte stämpel ich einfach mal als richtig ab ^^
    Func SocketToIP($SHOCKET) ;== Ip des Senders erhalten s. Hilfe "Function Reference TCPRecv"
    Local $sockaddr, $aRet
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
    EndFunc ;so 7 Zeilen entfernt, 1 Variable verändert und 2 Zeilen neugemacht :D

    [/autoit]


    so, Beschreibung liegt im Code bei :D

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Edit: vorheriger Post: Hey, cool danke :) Probier ich nachher mal aus :)

    Also der 10058 Fehler ist weg, dafür der 10038er da:

    Spoiler anzeigen

    WSAENOTSOCK 10038
    Socket operation on nonsocket. An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

    Der Fehler kommt, nachdem ich die Nachricht abschicken will und nun verharrt der Empfänger in der While-Schleife mit 50% Auslastung:

    Spoiler anzeigen
    [autoit]

    While 1
    $Msg = TCPRecv($accept, 9999)
    If $Msg <> "" Then
    $eingehendeIP = SockettoIP($accept)
    $name = _TCPIpToName($eingehendeIP)
    MsgBox(0, "Nachricht", $name & " schrieb folgendes an dich:" & @CRLF & $Msg)
    EndIf
    WEnd

    [/autoit]

    Vielleicht eine Idee woran es liegen könnte?

  • Ich hab jetzt mal dein Script durchgeguckt und konnte den Fehler bei mir nicht finden :(
    Könnte nicht noch wer über meine 2 Scripts rüberschauen, die sind ja nicht sooo lang