Chat Clienten bauen

  • Hi Leutz,

    ich hatte vor einen Chat Clienten zu bauen,
    die GUI's und alles werden auch denke ich kein Problem sein, allerdings hängts bei mir beim Grundgerüst, hab schon viel gesucht aber nichts gefunden.

    Hier mein Serverscript:

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <inet.au3>
    $ip = _getip()
    $port = "6667"
    TCPStartUp()
    $MainSocket = TCPListen($ip, $port, 128 )
    If $MainSocket = -1 or @error Then
    msgbox(0,"Error!",$mainsocket & " | " & @error)
    Exit
    EndIf

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

    While 1
    $ConnectedSocket = TCPAccept( $MainSocket)
    If $ConnectedSocket >= 0 Then
    ExitLoop
    EndIf
    Wend
    While 1
    $Message=TCPRecv($ConnectedSocket,128)
    Sleep(25)
    If $Message<>"" Then
    _filewritelog(@scriptdir & "\serverlog.log",$Message)
    TCPsend($ConnectedSocket,"Erhalten: " & $Message)
    EndIf
    WEnd

    [/autoit]

    mein Client:

    Spoiler anzeigen
    [autoit]


    #include <inet.au3>
    $messagewait = 0
    $ip = _getip()
    $port = "6667"
    Hotkeyset("{end}","_isendmessage")

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

    TCPStartUp()
    $MainSocket=TCPConnect($ip, $port)
    If $MainSocket = -1 Then Exit
    msgbox(0,"","connected",1)

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

    func _isendmessage()
    $Message=InputBox("Sending message","Enter the message you wish to send to your computer")
    if @error Then
    msgbox(0,"error","error")
    Exit
    EndIf
    TCPSend($MainSocket,$Message)

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

    do
    $msg = Tcprecv($mainsocket,12 8)
    sleep(20)
    $messagewait = $messagewait + 1
    until $msg <> "" or $messagewait > 25

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

    If $msg = "Erhalten: " & $Message then
    msgbox(0,"Erhalten",$msg)
    Else
    msgbox(0,"NICHT ERHALTEN","Nachricht konnte nicht gesendet werden!")
    EndIf
    $messagewait = 0
    EndFunc

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

    while 1
    sleep(50)
    WEnd

    [/autoit]

    Im Lan Funktioniert das ganze auch, allerdings im internet nicht.
    Egal welche I-Net IP ( oder meine eigene inetip ) ich eingebe es kommt immer Error.
    Habs auch einem Kumpel gegeben da ist das selbe.
    Der Code ist bis jetzt nur für Testzwecke und die Grundfunktionen.
    Wenn da jemand was weiss wäre das geil :)

    mfG qon, und gute nacht :)

    Einmal editiert, zuletzt von qon (7. Dezember 2007 um 19:56)

    • Offizieller Beitrag

    Hallo

    Um TCP/IP oder UDP übers Inetnet (WAN-IP) laufen lassen zu können, muss der Router des Servers den UDP/TCP Port freigegeben haben (Port Forwarding)

    Also, wenn ihr wie im beispiel Port 6667 benutzt muss der Router den Port 6667 freigegeben haben, und auf die LAN-IP des Servers (z.B. 192.168.0.2) "Forwarden" also sozusagen weiterschicken.

    Zur Erläuterung:
    Client --Sendet Packet zur WAN-IP (Port 6667) des Servers--> Router --Port6667 forwarden zu Lokalen Server IP--> Server

    Mfg Spider

  • Hi,

    IRC benutzt auch den Port 6667 und irc Funktioniert bei mir ja, an der Firewall liegt's auch nicht und habe gestern schon getestet Port 6667 für TCP freizugeben, allerdings änderte es sich nichts :(
    Trotzdem danke für deinen Tipp.

    mfG qon

  • Hi,

    ich hab ne Fritzbox, habe Port 6667 UDP und TCP freigegeben auf meine IP ( habe schon oft Ports freigegeben un es funzte immer :) )
    Naja wie gesagt wenn ich es im lan mache geht es :(

    edit: Yoa haste recht mit IRC meinte natürlich Quakenet :)
    edit2: Funktioniert das Script bei dir Per Internet? Also von deinem Rechner zu deinem Rechner ( _getip ) ?

    mfG qon

    2 Mal editiert, zuletzt von qon (6. Dezember 2007 um 14:52)

  • Also bei mir geht, jedenfalls Port 80 und mit 2350.
    Den Server hab ich mal verändert, um die IP auswählen zu können. Hinter einem Router muss die IP die LAN-IP sein, auf der tcplisten läuft.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <inet.au3>
    #include <GUIConstants.au3>
    $port = "6667" ; CHange the portnumber HERE

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

    $GUI = GUICreate("Server Choose IP",300,100) ; will create a dialog box that when displayed is centered

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

    $add=GUICtrlCreateButton ("OK", 8,2,75,25)
    $clear=GUICtrlCreateButton ("Beenden", 8,32,75,25)
    $mylist=GUICtrlCreateCombo ("127.0.0.1", 90,2,121,97)
    GuiCtrlSetData(-1,@IPAddress1 & "|" & @IPAddress2 & "|" & @IPAddress3 & "|" & @IPAddress4 & "|" & _GetIP())

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

    GUISetState ()

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

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

    Select
    case $msg = $add
    $ip = GuiCtrlRead($mylist)
    If StringRegExp($ip,"\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z") And $ip <> "0.0.0.0" Then Exitloop
    case $msg = $clear
    Exit
    Case $msg = $GUI_Event_Close
    Exit
    EndSelect
    Wend
    GuiCtrlsetstate($add,$GUI_DISABLE)
    GuiCtrlsetstate($mylist,$GUI_DISABLE)
    WinSetTitle($gui, "","Server RUNNING on " & $ip)

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

    ;$ip = "192.168.178.21";_getip()
    TCPStartUp()
    $MainSocket = TCPListen($ip, $port, 128 )
    If $MainSocket = -1 or @error Then
    msgbox(0,"Error!",$mainsocket & " | " & @error)
    Exit
    EndIf

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

    While 1
    $ConnectedSocket = TCPAccept( $MainSocket)
    If $ConnectedSocket >= 0 Then
    ExitLoop
    EndIf
    If GUIGetMsg() = $clear Then Exit
    Wend
    While 1
    $Message=TCPRecv($ConnectedSocket,128)
    Sleep(25)
    If $Message<>"" Then
    _filewritelog(@scriptdir & "\serverlog.log",$Message)
    TCPsend($ConnectedSocket,"Erhalten: " & $Message)
    EndIf
    If GUIGetMsg() = $clear Then Exit
    WEnd

    [/autoit]
  • Hi,

    danke für deine Antwort! :)
    Bei mir Funktioniert es leider immernoch nicht, also wieder nur per Lan.
    :( Ich werder aber mal weiter schauen da ich denke es liegt an meinem Router ( habe ihn aber richtig konfiguriert! )
    Falls ich irgendwann erfolg haben sollte werde ich bescheid geben!

    mfg qon

  • Ja, das gleiche ist bei mir ja auch, hab die msgbox gemacht um den Fehler zu sehn.
    die erste Zahl -1 ist der socket und die zweite der @error wert.
    Bei mir funzt es online auch einfach nicht :(

  • Also für Internet-Verbindung muss das so sein:
    a) mit Router:
    PC1 (server)
    ->TCPListen(LAN-IP_PC1)
    ->Router Portforward TCP auf LAN-IP_PC1
    PC2 (client)
    ->TCPConnect(Internet-IP)
    (evtl. ->Router Portforward TCP auf LAN-IP_PC2)

    //Edit: Der @error-wert entspricht dem TCP-Fehler. Hier eine Übersicht: http://frontier.userland.com/stories/storyReader$173
    // Hier eine deutsche Seite http://wiki.winboard.org/index.php/Winsock

    2 Mal editiert, zuletzt von progandy (9. Dezember 2007 um 16:00)