Hi,
Also ich versuche gerade mir ion AutoIt ein "Telnet-Ersatz" zu schreiben, ich benutze folgendes konzept:
1. Server wird auf einem PC gestartet (feste IP).
2. Client wird gestartet und verbindet sich mit dem Server.
3. Der Server kann Kommandos zum Client senden.
Wenn ich nun aber mehr als eine Verbindung zum Server herstellen will klappts nich, es kommt einfach nichts an...
Server Source
#include <GUIConstants.au3>
#include <Process.au3>
#include <Misc.au3>
TCPStartUp()
[/autoit] [autoit][/autoit] [autoit]Dim $szIPADDRESS = @IPAddress1
Dim $nPORT = 31758
Dim $mGUI = GUICreate("(IP: " & $szIPADDRESS & ")",300,200)
Dim $edit = GUICtrlCreateEdit("",10,10,280,150)
Dim $cmdbox = GUICtrlCreateInput("", 10, 170, 215, 20)
Dim $sendcmd = GUICtrlCreateButton("Send", 240, 170, 50, 20)
ControlFocus($mGUI, "", $sendcmd)
GUISetState()
$MainSocket = TCPListen($szIPADDRESS,$nPORT)
[/autoit] [autoit][/autoit] [autoit]Dim $ConnectedSocket = -1
[/autoit] [autoit][/autoit] [autoit]Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
Dim $szData
[/autoit] [autoit][/autoit] [autoit]$acceptIP = SocketToIP($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]If @error Then
MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
Else
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $sendcmd
$cmd = GUICtrlRead($cmdbox)
TCPSend($ConnectedSocket, $cmd)
EndSwitch
If _IsPressed("0D") Then
$cmd = GUICtrlRead($cmdbox)
TCPSend($ConnectedSocket, $cmd)
Sleep(800)
EndIf
$recv = TCPRecv( $ConnectedSocket, 2048 )
[/autoit] [autoit][/autoit] [autoit]If $recv <> "" Then GUICtrlSetData($edit, GUICtrlRead($edit) & "> " & $recv & @CRLF)
[/autoit] [autoit][/autoit] [autoit]If @error Then ExitLoop
WEnd
EndIf
Func SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
Local $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
Client Source
#include <GUIConstants.au3>
#include <Constants.au3>
#include <File.au3>
$IP = InputBox("Enter IP", "Enter IP")
[/autoit] [autoit][/autoit] [autoit]Dim $firstconnect = 1
Dim $szIPADDRESS = $IP
Dim $nPORT = 31758
TCPStartUp()
[/autoit] [autoit][/autoit] [autoit]$MainSocket = TCPConnect($szIPADDRESS, $nPORT)
[/autoit] [autoit][/autoit] [autoit]If $MainSocket = -1 Then Exit
[/autoit] [autoit][/autoit] [autoit]GUICreate("(IP: " & $szIPADDRESS & ")",300,200)
$edit = GUICtrlCreateEdit("",10,10,280,150)
GUISetState()
Dim $recv
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
$recv = TCPRecv( $MainSocket, 2048 )
[/autoit] [autoit][/autoit] [autoit]If $firstconnect = 1 Then
Local $tempip, $wanip , $cut1, $cut2, $ipfile
InetGet ("http://checkip.dyndns.org", @TempDir & "\waniptemp.txt", 1,1)
$ipfile= FileOpen(@TempDir & "\waniptemp.txt",0)
$tempip = FileRead($ipfile,120 )
FileClose($ipfile)
FileDelete (@TempDir & "\waniptemp.txt")
$cut1 = StringInStr($tempip, "Address:")
$cut2 =StringInStr($tempip, "</body>")
$wanip = StringMid($tempip, $cut1+8, $cut2-($cut1+8))
Sleep(5000)
[/autoit] [autoit][/autoit] [autoit]TCPSend($MainSocket, $wanip & ": Connection Successfull!")
$firstconnect = 0
EndIf
If $recv <> "" Then GUICtrlSetData($edit,"> " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If $MainSocket <> -1 Then TCPCloseSocket( $MainSocket )
[/autoit] [autoit][/autoit] [autoit]TCPShutDown()
[/autoit] [autoit][/autoit] [autoit]Func SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
"ptr",DLLStructGetPtr($sockaddr),"int_ptr",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
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc
Bitte um hilfe....