TCP-Verbindung zwischen Java und Autoit

  • Hi,

    ich möchte eine TCP-Verbindung zwischen zwischen einen Javaclient und einem Autoitserver herstellen. Man muss dazu sagen das ich noch ziemlicher anfänger in Sachen Java bin. Hier mal die Javaclass für den Java-Client:

    Spoiler anzeigen

    Und hier mal noch die Javaclass für einen Java-Server:

    Spoiler anzeigen

    Wenn beide gestartet sind Verbindet sich der Client mit dem Server, kann an diesen Daten senden und empfängt auch Daten von dem Server.

    So nun habe ich die Serverseite in Autoit gemacht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Example()

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

    Func Example()
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 4444
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

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

    TCPStartup()

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

    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    If $MainSocket = -1 Then Exit

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

    #region ### START Koda GUI section ### Form=
    $GOOEY = GUICreate("Mein", 301, 201, 192, 125)
    $edit = GUICtrlCreateEdit("", 10, 10, 280, 124)
    GUICtrlSetData(-1, "")
    $Button1 = GUICtrlCreateButton("Button1", 16, 152, 75, 25)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $ConnectedSocket = -1

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

    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    ConsoleWrite("verbunden" & @CRLF)

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

    $szIP_Accepted = SocketToIP($ConnectedSocket)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Button1
    TCPSend($ConnectedSocket, "antwort")
    EndSwitch

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

    $recv = TCPRecv($ConnectedSocket, 2048)

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

    If @error Then ExitLoop

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

    If $recv <> "" Then
    GUICtrlSetData($edit, $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    EndIf
    WEnd

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

    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

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

    TCPShutdown()
    EndFunc ;==>Example

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

    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

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

    Die JavaClient baut nun auch brav eine Verbindung zum Autoitserver auf und der Autoitserver empfängt auch alles vom Client gesendeten Daten. Allerdings wenn ich nun den Button drücke um via TCPSend etwas an den Javaclient zu senden kommt bei diesem einfach nichts an.

    Jemand eine Idee zur Lösung?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (1. November 2012 um 09:31)

  • So wie ich das sehe, empfängst du die Daten in Java mit in.readLine(). Ich hab noch mal nachgeschaut und in der Doku steht, dass dadurch eine Zeile eingelesen wird. Was auch sonst ;). Du schickst als Antwort jedoch nur "antwort" und kein @CRLF. Wahrscheinlich glaubt er dann, das es ja noch keine neue Zeile gegeben hat und zeigt deshalb nach nichts an. Versuchs mal damit.

    Gruss Shadowigor