Problem mit TCP

  • hi,

    ich hab folgendes problem:

    wenn ich den server wie im spoiler starte,dann funzt er nicht 8| ich hab keine ahnung warum weiß das vllt einer von euch? ich hba zwar ne lösung gefunden aber dann kann nur ein client connecten und das ist ja auch doof weil ich mindestens 2 brauche. ;)

    Server:

    Spoiler anzeigen
    [autoit]

    Global $Clients = 0

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

    TCPStartup()

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

    $MainSocket = TCPListen(@IPAddress1,6667)
    If $MainSocket = -1 Then Exit

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

    While 1
    $Connect = TCPAccept($MainSocket)
    If $Connect >= 0 Then
    $Clients = $Clients + 1
    EndIf

    $Recv = TCPRecv($Connect,2048)
    If $Recv <> "" Then
    $split = StringSplit($Recv,"|")
    If $split[1] = "MSG" Then
    MsgBox(0,"", $split[2])
    EndIf
    EndIf
    WEnd

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    TCPStartup()

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

    While 1
    $Connect = TCPConnect(_GetIP(),6667)
    If $Connect <> 0 Then ExitLoop
    WEnd

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

    TCPSend($Connect,"MSG|" & InputBox("la","bla"))

    [/autoit]
  • Du musst auf dem Server die Clients zwischenspeichern und für jeden nach empfangenen Daten suchen:

    Spoiler anzeigen
    [autoit]

    Global $Clients[1]

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

    TCPStartup()

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

    $MainSocket = TCPListen(@IPAddress1,6667)
    If $MainSocket = -1 Then Exit

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

    Do
    $Connect = TCPAccept($MainSocket)
    Until $Connect <> -1 ;Auf ersten Client warten!

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

    $Clients[0] = $Connect 1. Client in Speicher einfügen.

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

    While 1
    $Connect = TCPAccept($MainSocket) ; Auf weitere Clients prüfen
    If $Connect >= 0 Then
    ReDim $Clients[UBound($Clients)+1] ; Array vergrößern, um den Clienten einfügen zu können
    $Clients[UBound($Clients)-1] = $Connect ; Client speichern
    EndIf

    For $i = 0 To UBound($Clients)-1 ; Für jeden Client...
    $Recv = TCPRecv($Clients[$i],2048) ; Daten empfangen
    If $Recv <> "" Then ; Wen Daten da ...
    $split = StringSplit($Recv,"|")
    If $split[1] = "MSG" Then
    MsgBox(0,"", $split[2])
    EndIf
    EndIf
    Next ; ...Nächster Client
    WEnd

    [/autoit]

    //Edit: Kommentare hinzugefügt.

    Einmal editiert, zuletzt von progandy (20. Januar 2008 um 18:39)

  • ok thx es funzt schon mal aber gibt es vllt noch ne einfachere lösung die ich auch versteh? weil ich hab gestern erst mit TCP und so angefangen. oder das script ein bissl komentieren ;)

    EDIT: Kommentare gelesen und skript verstanden ;)

    2 Mal editiert, zuletzt von .::Mignon::. (20. Januar 2008 um 19:32)

  • @progandy: gibt es auch eine das ohne die Do schleife zu machen weil sonst funzt die GUI erst wenn der erste Client on is. ;)

  • Ja, das geht. Dann mach aber aus
    Global $Clients[1]
    das:
    Global $Clients
    Damit liefert Ubound beim ersten mal 0 und das Array wird von Anfang an gefüllt.

  • deine idee hat einen kleinen fehler. wenn ich $Clients[1] zu $Clients umschreibe dann is $Clients doch gar kein array mehr oder?

    kannst du das skript vllt für mich ändern?

    weil ich bekomm immer wieder fehlermeldungen u.a. bei ReDim das das $Clients kein array is und so. ;)

    EDIT: ok hat sich schon erledigt^^ ich musste nur die Do schleife weh lassen. und es funzt trotzdem noch einwandfrei. ;)

    2 Mal editiert, zuletzt von .::Mignon::. (20. Januar 2008 um 20:19)