Chat - Server

  • Huhu

    Problem :
    Chat sockets werden in array geschrieben
    Benutzernamen nicht x_X

    komplettes restliches select funktioniert auch nicht ?

    Hier mal der Code des servers

    [autoit]


    ;Server by Nachid
    #include
    $ip = IniRead("config.ini","Config","IP","X")
    $port = IniRead("config.ini","Config","Port","X")
    $max = IniRead("config.ini","Config","Max","100")
    If $ip="X" Or $port="X" Then Exit(1)
    TCPStartup()
    $main = TCPListen($ip,$port,$max)
    Dim $socket[1]
    Dim $nickaname[1]
    $blocked = IniReadSection("config.ini","Blocked")
    waitconnect()

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

    Func waitconnect()
    While 1
    $grabconnection = TCPAccept($main)
    If $grabconnection>=0 Then
    _ArrayAdd($socket,$grabconnection)
    _ArrayAdd($nickaname,"")
    _ArrayDisplay($socket)
    _ArrayDisplay($nickaname)
    EndIf
    For $i=1 To UBound($socket)-1
    $rcv= TCPRecv($main,2048)
    Select
    Case $rcv<>"" And $nickaname[$i]=""
    ConsoleWrite("Register nickname"&@CRLF)
    For $x=1 To UBound($nickaname,1)-1
    If $nickaname[$x]=$rcv Then
    TSend("Name nicht zugelassen.",$socket[$i])
    TSend("Name per /name ändern",$socket[$i])
    $socket[$i]=""
    $nickaname[$i]=""
    TCPCloseSocket($socket[$i])
    EndIf
    Next
    For $x=1 To UBound($blocked,1)
    If StringInStr($rcv,$blocked[$x][1]) Then
    TSend("Name nicht zugelassen.",$socket[$i])
    TSend("Name per /name ändern",$socket[$i])
    TCPCloseSocket($socket[$i])
    $socket[$i]=""
    $nickaname[$i]=""
    EndIf
    Next
    If Not $socket[$i]="" Then $nickaname[$i]=$rcv

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

    Case StringTrimLeft($rcv,3)="/w "
    ConsoleWrite("Whisper"&@CRLF)
    $to = StringSplit($rcv," ")
    $rest = ""
    For $x=1 To UBound($to,1)-2
    $rest = $rest&$to[$x]
    Next
    $to = $to[2]
    For $x=1 To UBound($nickaname,1)-1
    If $nickaname[$x]=$to Then
    TSend($rest,$socket[$x])
    TSend($rest,$socket[$i])
    EndIf
    Next
    Case Else
    If $rcv<>"" Then
    ConsoleWrite("Send to all"&@CRLF)
    TSend($rcv)
    EndIf
    EndSelect
    Next
    WEnd
    EndFunc

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

    Func TSend($var,$ssocket = Default)
    If $ssocket = Default Then
    For $i=1 To UBound($socket,1)-1
    If $socket[$i]<>"" Then
    TCPSend($socket[$i],$var)
    ConsoleWrite("Socket : "&$socket[$i]&@CRLF)
    ConsoleWrite("Nick : "&$nickaname[$i]&@CRLF)
    EndIf
    Next
    Else
    TCPSend($ssocket,$var)
    ConsoleWrite("Socket : "&$ssocket&@CRLF)
    ConsoleWrite("Nick : "&$var&@CRLF)
    EndIf
    EndFunc

    [/autoit]

    Und hier ne kleine Test au3

    [autoit]

    ;Server by Nachid

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

    TCPStartup()
    $main = TCPConnect("192.168.0.100",33981)
    If @error Then _
    MsgBox(4112, "Fehler", "TCP-Connect schlug mit folgendem WSA-Fehler fehl: " & @error)
    While 1
    TCPSend($main,"Das ist ein Test")
    If @error Then Exit(1)
    WEnd

    [/autoit]


    Wär richtig geil wenn mir jmd helfen könnte^^

    -

    Einmal editiert, zuletzt von Nachid (16. August 2011 um 20:01)

  • [autoit]


    _ArrayAdd($socket,$grabconnection)
    _ArrayAdd($nickaname,"")

    [/autoit]

    Der Nickname wird doch gespeichert, nur eben ein leerer String so wie du es hier eben bestimmst. Woher der Nickname kommen soll weiß ich auch nicht, denn im Client sendest du ja garkeinen.
    In deinem kompletten Serverscript sehe ich immer nur ein $nickname[$i]=""

    Was erwartest du also was am Ende in deinem Array steht ausser leeren Strings?

  • Gut, (ich hab das heute schon das 2te mal geschrieben, 1x auf nem anderen rechner deswegen dahct ich ich hab die zeile drin)

    mal das beiseite is der Client nur n Testclient....

    Versuch da mal was hinzuschicken, trotzdem müsste doch Case Else
    die Nachricht an alle wieder zurückverteilen oder ?

    //Edit hab ne zeile fürn nick eingefüt
    //Edit 2
    geht imer noch nicht, kannste das mal schnell für mich verbessern -.-
    -.- der renamer war einfacher

    -

  • Versuch da mal was hinzuschicken, trotzdem müsste doch Case Else
    die Nachricht an alle wieder zurückverteilen oder ?

    EDIT: ups verlesen

    EDIT2:

    Ja eigentlich müsste was gesendet werden wenn ich das recht sehe. Jedoch sehe ich in deinem Client kein tcprecv().
    Das bedeutet der Server kann schicken was er will wenn dein Client überhaupt nicht auf eine Antwort wartet.

  • Dafür hab ich ein 2tes testscript :D

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    TCPStartup()
    $main = TCPConnect("192.168.0.100",33981)

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

    While 1
    $rec = TCPRecv($main,64)
    If @error Then Exit(1)
    If $rec <> "" Then MsgBox(0,"Reciever",$rec)
    WEnd

    [/autoit]

    -