Probleme mit TCP

  • Hola
    Ich arbeite gerade an einem Script, mit dem man sozusagen live auf anderen PCs malen kann. Client&Server sind in der gleichen Datei.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Inet.au3>
    ;~ #NoTrayIcon
    Opt("TrayIconDebug", 1)
    Opt("MouseCoordMode", 2)
    Func _IsPressed($s_hexKey, $v_dll = 'user32.dll')
    Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_hexKey)
    If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1
    Return 0
    EndFunc ;==>_IsPressed
    Func _IsActive($handle)
    If BitAND(WinGetState($handle), 8) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_IsActive
    Func _Clear()
    GUICtrlDelete($paintfield)
    $paintfield = GUICtrlCreateGraphic(0, 0, 500, 280)
    HotKeySet("{ENTER}")
    Send("{ENTER}")
    HotKeySet("{ENTER}", "_Clear")
    TCPSend($ConnectedSocket, "func.clear")
    EndFunc ;==>_Clear

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

    $dll = DllOpen("user32.dll")
    $PublicIP = _GetIP()
    $listen = False
    $newline = False

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

    Dim $ConnectedSocket = -1

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

    TCPStartup()

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

    $gui = GUICreate("LoL", 800, 600, 0, 0, -1)
    GUISetBkColor(0xffffff)
    $paintfield = GUICtrlCreateGraphic(0, 0, 800, 580)
    GUISetState(@SW_SHOW)
    $filemenu = GUICtrlCreateMenu("&File")
    $verbinden = GUICtrlCreateMenuitem("Verbinden!", $filemenu)
    $resetitem = GUICtrlCreateMenuitem("Reset", $filemenu)
    $separator = GUICtrlCreateMenuitem("", $filemenu)
    $exititem = GUICtrlCreateMenuitem("Exit", $filemenu)

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

    While 1
    $msg = GUIGetMsg()
    $curpos = MouseGetPos()
    If $listen = True Then
    $ConnectedSocket = TCPAccept($ListenSocket)
    If $ConnectedSocket >= 0 Then
    MsgBox(0, "", "Verbindung hergestellt!")
    $listen = False
    EndIf
    EndIf
    Select
    Case $msg = $resetitem
    _Clear()
    Case $msg = $verbinden
    $ipaddress = InputBox("Create Sesssion", @LF & @LF & "IP zum connecten:")
    $ConnectedSocket = TCPConnect($ipaddress, 10052)
    If $ConnectedSocket = -1 Then
    $ListenSocket = TCPListen($ipaddress, 10052)
    if $ListenSocket == -1 then msgbox(0,"ERROR","Error opening listen socket!")
    $listen = True
    Else
    MsgBox(0, "", "Verbindung hergestellt!")
    EndIf
    Case $msg = $exititem
    ExitLoop
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    If _IsPressed("01", $dll) And _IsActive($gui) Then
    GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $curpos[0], $curpos[1])
    TCPSend($ConnectedSocket, "newline")
    While _IsPressed("01", $dll)
    $curpos = MouseGetPos()
    FileWriteLine("tteszt.txt", $GUI_GR_MOVE)
    GUICtrlSetGraphic($paintfield, $GUI_GR_LINE, $curpos[0], $curpos[1])
    GUICtrlSetGraphic($paintfield, $GUI_GR_REFRESH)
    Sleep(1)
    If $ConnectedSocket <> -1 Then
    TCPSend($ConnectedSocket, "drawline " & $curpos[0] & " " & $curpos[1] & " ")
    EndIf

    WEnd
    EndIf
    If $ConnectedSocket <> -1 Then
    $recv = TCPRecv($ConnectedSocket, 2048)
    If $recv <> "" Then
    If $recv = "newline" Then
    $newline = True
    Else
    $recvdata = StringSplit($recv, " ")
    If $recvdata[1] = "drawline" Then
    If $newline = True Then
    GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $recvdata[2], $recvdata[3])
    $newline = False
    EndIf
    GUICtrlSetGraphic($paintfield, $GUI_GR_LINE, $recvdata[2], $recvdata[3])
    GUICtrlSetGraphic($paintfield, $GUI_GR_REFRESH)
    GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $recvdata[2], $recvdata[3])
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd
    GUIDelete($gui)
    Exit

    [/autoit]

    Nicht wundern, das Script ist noch lange nicht fertig, erstmal möchte ich das mein TCP-Problem lösen.
    Das Problem ist, dass das Script wunderbar klappt solange ich Client&Server auf dem gleichen PC ausführe (also 127.0.0.1 als IP eingebe), sobald ich das Script jedoch auf zwei verschiedenen PCs ausführe, klappts nicht mehr. Ich bin verzweifelt!

  • DAs Script funktioniert zwar, hilft mir aber leider nicht weiter. Mein Problem war, das mein Script nur funktioniert, solange Client und Server von der gleichen IP aus laufen. Wenn ich mich mit einem anderen Computer (und anderer IP) verbinden will, passiert nix. trotzdem danke ;)

    Edit: Problem inzwischen gelöst!

    Einmal editiert, zuletzt von StNick (3. Mai 2007 um 17:53)