Hallo Leute,
ich versuch gerade ein bisschen Server und Client über die TCP funktion in Autoit zu testen. Dazu habe ich diese Scripts aus diesem Tutorial als Grundlage verwendet.
Hier die von mir abgeänderten Scripts für meinen Versuch.
client:
Spoiler anzeigen
TCPStartup() ; TCP wird initialisiert
[/autoit] [autoit][/autoit] [autoit]$iptoconnect = TCPNameToIP ("dyndns-des-anderen.pc")
$socket = TCPConnect($iptoconnect, 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
$sendedBytes = TCPSend($socket, "Hi. Dieser Text wurde vom Client gesendet :)") ; Sendet den Text an unseren verbundenen Socket
If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
EndIf
TCPCloseSocket($socket)
TCPShutdown()
server:
Spoiler anzeigen
TCPStartup() ; TCP wird initialisiert
[/autoit] [autoit][/autoit] [autoit]$hostip = TCPNameToIP (@ComputerName) ; <= Hier habe ich auch mit @ipadresse 1 , der IP im LAN und dem Hostname getestet, funtkioniert alles
$mainsocket = TCPListen($hostip, 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
TCPCloseSocket($acceptedSocket)
EndIf
WEnd
Um vorab schon zu klären. Der Port 4321 ist im Router als TCP und UDP (sicher ist sicher) für den PC auf dem der Server läuft freigegeben.
Folgendes tut sich auf wo ich schön langsam in die Verzweiflung komme. Im LAN wenn ich das script zwichen zwei PC's teste, funktioniert dieses script tadellos. Der PC mit dem Server bekommt die Meldung angezeigt. "Es wurde eine Nachricht empfangen: Hi. Dieser Text wurde vom Client gesendet :)" . So wie es ja beabsichtigt ist. Will ich das ganze über das I-Net testen, bekomme ich nur "Es wurde eine Nachricht empfangen:" in der Message Box angezeigt. So als ob der inhalt der gesendet werden soll unter demTisch landet und nie wieder zum vorschein kommt.
Beim Server hab für den Socket schon alles mögliche probiert. Localhost, IP in rohform usw. Entweder gibt es keine Verbindung (Localhost z.B) oder es erscheint nur das Fenster wo der zu empfangende inhalt fehlt. Beim Client hab ich auch mit der Internetip getestet. Auch immer dasselbe.
Desweiteren hab ich auch mal kurz ohne jegliche Firewall und Virenscanner getestet. Keine Veränderung... leider ...
Jetzt hoff ich das mit jemand eine Ursache dafür nennen kann oder hilfe dazu gibt. Ich kann mir nicht vorstellen warum die Daten nicht ankommen, schliesslich erkennt der server ja das eine TCP Verbindung eingeht und im LAN funktioniert das script auch einwandfrei.
Gruss
Waidler