Ja dieses Problem hatte ich auch schon einmal, aber nicht bei TCP sondern beim UDP protokoll.
Auch hier hatte ich vor eine anfrage an ein Gerät zu senden und auf die Antwort zu warten, diese kam aber nicht auf dem selben Port zurück wie die Anfrage. Also habe ich mir folgendes gebastelt.
Vieleicht kannst du das ja auch auf das TCP protokoll anwenden.
hier mein sinpplet (hier habe ich nach einem gerät gesucht und die anfrage über port 10011 gesendet und den port abgefangen.: (hoffe du steigst da durch
Spoiler anzeigen
UDPStartup()
$socket = UDPOpen("255.255.255.255", 10011, 1)
If @error Then
SetError(1)
;~ MsgBox(-1, "", "error udpopen")
Exit
EndIf
#endregion Broadcast IP erstellen und Port öffnen zu dem gesendet werden soll.
broadcastsend($socket, ".") ; irgentetwas senden um einen Port zu aktivieren
[/autoit] [autoit][/autoit] [autoit]#region Port auslesen von dem aus gesendet wurde
$ausgabe = _getDOSOutput("netstat -aonp udp")
$ausgabe = StringStripWS($ausgabe,
$ausgabe = StringTrimRight($ausgabe, StringLen($ausgabe) - StringInStr($ausgabe, "*:*" & @AutoItPID) - 6)
$ausgabe = StringTrimLeft($ausgabe, StringInStr($ausgabe, "*:*" & @AutoItPID) - 25)
$zwischenwert = _StringBetween($ausgabe, "0.0.0.0:", "*:*" & @AutoItPID)
Global $port = _ArrayUnique($zwischenwert)
hier noch die passenden funktionen aus dem snipplet:
Spoiler anzeigen
Func broadcastsend($sSocket, $sSendewert)
UDPSend($sSocket, $sSendewert & @CRLF)
If @error Then
MsgBox(-1, "", "error send")
EndIf
EndFunc ;==>broadcastsend
Func _getDOSOutput($command)
Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2)
While 1
$text &= StdoutRead($Pid, False, False)
If @error Then ExitLoop
Sleep(10)
WEnd
Return $text
EndFunc ;==>_getDOSOutput
hintergrund gedanke war nun das wenn ich einmal was gesendet habe der port sich nicht mehr ändert. was auch zumindest bei meinem gerät zum erfolg führte.
Gruß
Pre