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
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
Empfänger:
Spoiler anzeigen
#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
#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
Vielen Dank
Aquaplant