TCPRecv timeout einbauen

  • Hi,

    also mein server soll kleinere text emppfangen, das tut er auch.
    Nur wenn mal nix kommt dann wartet er immer och bis was kommt und so muss ich ihn neu starten.
    Ich hab auch schon das hier versucht :

    Spoiler anzeigen
    [autoit]


    TCPStartup()

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

    $Main = TCPListen($IP, $PORT, $MAXUSE)
    If $Main = @error Then Exit

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

    While 1
    $Client = TCPAccept($Main)

    if $Client >= 0 Then
    $iIP = SocketToIP($Client)
    ConsoleWrite("Client Connect")
    $get = 0
    $time = 0
    $geted = "nothing"

    While $get <> "" or $time = 100000
    $get = TCPRecv($Client, 2048)
    if $get <> "" Then
    ConsoleWrite("get :"&$geted)
    GUICtrlSetData($geted,$geted)
    GUICtrlSetData($time, 100000)
    EndIf
    GUICtrlSetData($time,+1)
    WEnd
    ConsoleWrite($geted)
    EndIf

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

    WEnd

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

    ; Function to return IP Address from a connected socket.
    ;----------------------------------------------------------------------
    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), "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 = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    $aRet = $aRet[0]
    EndIf

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]

    nur vergeht die zeit unheimlich schnell und mein if abfrage kommt nicht mit...^^
    kann mir einer zu was bssererm raten (was auch funktioniert)

    ach ja und die SocketToIP() funktion geht auch nich (hab ich aus helpfile)

    mfg Jiyan006

  • Hallo & Moin Moin.

    Du mußt die FTP Verbindung wieder schließen.

    Die nachfolgenden Scripte sollten Dir helfen.

    LG, Lina.

    _FTPOpen():

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ;
    ; Function Name: _FTPOpen()
    ; Description: Opens an FTP session.
    ; Parameter(s): $s_Agent - Random name. ( like "myftp" )
    ; $l_AccessType - I dont got a clue what this does.
    ; $s_ProxyName - ProxyName.
    ; $s_ProxyBypass - ProxyByPasses's.
    ; $l_Flags - Special flags.
    ; Requirement(s): DllCall, wininet.dll
    ; Return Value(s): On Success - Returns an indentifier.
    ; On Failure - 0 and sets @ERROR
    ; Author(s): Wouter van Kesteren.
    ;
    ;===============================================================================

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

    Func _FTPOpen($s_Agent, $l_AccessType = 1, $s_ProxyName = '', $s_ProxyBypass = '', $l_Flags = 0)

    Local $ai_InternetOpen = DllCall('wininet.dll', 'long', 'InternetOpen', 'str', $s_Agent, 'long', $l_AccessType, 'str', $s_ProxyName, 'str', $s_ProxyBypass, 'long', $l_Flags)
    If @error OR $ai_InternetOpen[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

    Return $ai_InternetOpen[0]

    EndFunc ;==> _FTPOpen()

    [/autoit]


    _FTPConnect():

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ;
    ; Function Name: _FTPConnect()
    ; Description: Connects to an FTP server.
    ; Parameter(s): $l_InternetSession - The Long from _FTPOpen()
    ; $s_ServerName - Server name/ip.
    ; $s_Username - Username.
    ; $s_Password - Password.
    ; $i_ServerPort - Server port ( 0 is default (21) )
    ; $l_Service - I dont got a clue what this does.
    ; $l_Flags - Special flags.
    ; $l_Context - I dont got a clue what this does.
    ; Requirement(s): DllCall, wininet.dll
    ; Return Value(s): On Success - Returns an indentifier.
    ; On Failure - 0 and sets @ERROR
    ; Author(s): Wouter van Kesteren
    ;
    ;===============================================================================

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

    Func _FTPConnect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_ServerPort = 0, $l_Service = 1, $l_Flags = 0, $l_Context = 0)

    Local $ai_InternetConnect = DllCall('wininet.dll', 'long', 'InternetConnect', 'long', $l_InternetSession, 'str', $s_ServerName, 'int', $i_ServerPort, 'str', $s_Username, 'str', $s_Password, 'long', $l_Service, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_InternetConnect[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

    Return $ai_InternetConnect[0]

    EndFunc ;==> _FTPConnect()

    [/autoit]


    _FTPPutFile():

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ;
    ; Function Name: _FTPPutFile()
    ; Description: Puts an file on an FTP server.
    ; Parameter(s): $l_FTPSession - The Long from _FTPConnect()
    ; $s_LocalFile - The local file.
    ; $s_RemoteFile - The remote Location for the file.
    ; $l_Flags - Special flags.
    ; $l_Context - I dont got a clue what this does.
    ; Requirement(s): DllCall, wininet.dll
    ; Return Value(s): On Success - 1
    ; On Failure - 0
    ; Author(s): Wouter van Kesteren
    ;
    ;===============================================================================

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

    Func _FTPPutFile($l_FTPSession, $s_LocalFile, $s_RemoteFile, $l_Flags = 0, $l_Context = 0)

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

    Local $ai_FTPPutFile = DllCall('wininet.dll', 'int', 'FtpPutFile', 'long', $l_FTPSession, 'str', $s_LocalFile, 'str', $s_RemoteFile, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_FTPPutFile[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

    Return $ai_FTPPutFile[0]

    EndFunc ;==> _FTPPutFile()

    [/autoit]


    _FTPClose():

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ;
    ; Function Name: _FTPClose()
    ; Description: Closes the _FTPOpen session.
    ; Parameter(s): $l_InternetSession - The Long from _FTPOpen()
    ; Requirement(s): DllCall, wininet.dll
    ; Return Value(s): On Success - 1
    ; On Failure - 0
    ; Author(s): Wouter van Kesteren
    ;
    ;===============================================================================

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

    Func _FTPClose($l_InternetSession)

    Local $ai_InternetCloseHandle = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $l_InternetSession)
    If @error OR $ai_InternetCloseHandle[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

    Return $ai_InternetCloseHandle[0]

    EndFunc ;==> _FTPClose()

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • ich sende ja keine dateien sonder jediglich texte
    und empfange diese, verarbeite sie und dann schick ich wieder ne antwort back (also nicht ich sonder server^^...)

  • Sind Texte keine Dateien oder wie willst Du sie rüber senden?
    Erkläre mal bitte etwas genauer / ausführlicher.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • ^^
    ok also

    SERVER(ICH) wartet...
    CLIENT(DU) checkt kurz ob Server on ist
    SERVER denkt es kommt noch was
    CLIENT will jetzt was senden
    SERVER wartet immer noch
    CLIENT gibtz auf
    SERVER wartet immer noch..^^

    jetzt wollte ich das so machen:

    SERVER wartet..
    CLIEN check kurz ob Server on ist
    SERVER denkt es kommt was, aber nach 2 Sekunden lässt er es sein
    CLIENT sendet jetzt was
    SERVER empängt
    SERVER verarbeitet den Befehl
    SERVER sendet was back
    CLIENT empfängt
    CLIENT verarbeitet
    CLIENT antwortet
    CLIENT geht plötzlich on
    SERVER wartet ob was kommt, merkt aber das CLIENT off ist und sagt bescheid.

    Ja und das bekomm ich net hin..