Zähler

  • Bitte um Hilfe
    Wie könnte mann so etwas realisieren:
    Habe einen einfachen Zähler erstellt, wenn ein Knopf gedrückt wird (i = i +1)
    wird die jeweillige zahl um 1 erhöht und in eine textdatei (auf dem server) geschrieben.
    So weit so gut.
    Nun möchte ich das die letzte Zahl aus dieser Datei (im diesem Falle die 3):
    1
    2
    3
    auf 3 verschiedenen Rechnern anzeigen.
    Da kein gleichzeitiger Zugrif auf die txt. datei möglich ist, habe ich an
    AdlibEnable (zB 5 sec Zugriff) gedacht.
    Auserdem sollte man jederzeit in der Lage sein die Zahl zu erhohen.
    Dankehttp: //autoit.aufwaerts.de/images/smilies/irre.gif
    Irre

  • Das ist ein altes Problem von Datenbanken im allgemeinen. ( Stichwort: ACID Transktionen).

    Warum sollten aber nicht mehrere auf eine Datei zugreifen können. (FileClose nach jedem Zugriff) Aber das Prinzipielle Problem bleibt, dass konkurrierende Schreibzugriffe zu unberechenbaren ergebnissen führen können.

    • Offizieller Beitrag

    Hallo!

    mach es doch mit TCP/IP... ist schneller und verbrauch kein speicherplatz...

    ich mach dir mal ein skript (kommt gleich mit edit...)

    Mfg Spider

    Edit: So.. hab dir nun ein Skript gemacht:

    Server:. (MaxPend kannst du belibig verändern, aber bei einer zahl > 50 könnte es zu problemen kommen...)

    Spoiler anzeigen
    [autoit]

    ;SERVER

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

    TCPStartup()

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

    Global Const $PORT = 1223

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

    Global $maxpend = 10;wieviele leute gleichzeitig connecten können
    Global $verbindungen[$maxpend+1]

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

    $Listen = TCPListen(@IPAddress1,$PORT,$maxpend)

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

    AdlibEnable("_Waitforinc",100)

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

    For $zaehler = 1 To 1000
    _SendToAllSock($zaehler)
    Sleep(1000)
    Next

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


    Func _Waitforinc()
    $acc = TCPAccept($Listen)
    If $acc = -1 Then Return
    For $i = 1 To $maxpend
    If Not $verbindungen[$i] Then
    $verbindungen[$i] = $acc
    Return
    EndIf
    Next
    TCPSend($acc,"full")
    TCPCloseSocket($acc)
    EndFunc

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

    Func _SendToAllSock($text)
    For $i = 1 To $maxpend
    If $verbindungen[$i] Then TCPSend($verbindungen[$i],$text)
    Next
    EndFunc

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]

    ;CLIENT

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

    TCPStartup()

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

    Global Const $PORT = 1223
    Global Const $IP = @IPAddress1 ;@ipadress1 funktioniert nur wenn der client auf dem gleichen rechner wie der server läuft...

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

    $con = -1
    $recv = ""
    While $con = -1
    $con = TCPConnect($IP,$PORT)
    WEnd
    $spl = SplashTextOn("","Wait for recv...",150,20,-1,-1,16)
    While 1
    Do
    $recv = TCPRecv($con,64)
    If @error Then Exit MsgBox(48,"Error","Server is full or Server has exit")
    Until $recv <> ""
    ControlSetText($spl,"","Static1",$recv)
    WEnd

    [/autoit]

    Hoffe konnte helfen ;)

  • Hätte es auch so gemacht über tcp ein server und soviele clients wie du willst...