Hi,
ich möchte einen Netzwerk-Chat ohne Server schreiben. D.h. es müssten alle Eingaben an alle Chat-Programme geschickt werden oder wer den Chat als 1. startet fungiert als Server. Das hat allerdings den Nachteil wenn dieser den Chat verlässt bricht der Chat zusammen da der Server fehlt. Die erste Methode wäre dadurch am besten ist aber wahrscheinlich ziemlich langsam da er ja alles öfter schicken muss.
Einen Server will ich deshalb nicht da dieser von jemanden gestartet werden müsste. Wenn der jemand nun nicht da ist können die anderen mit dem Ofenrohr ins Gebirge schaun. Die Lösung ware hierfür den Server an meherer Leute zu verteilen. Dadurch würden aber mehrere den Chat-Server starten da man sich ja nicht absprechen kann. Aus diesem Grund habe ich beschlossen das ganze ohne Server zu machen.
Hat wer eine Idee zur realisierung des ganzen?
GUI und n paar Testübertragungen sind schon fertig:
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=MoN_icon.ico
#AutoIt3Wrapper_Res_Description=by Michi26206
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_LegalCopyright=by Newinto-Projekt
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs --------------------------------------------------------------------------------------------------------
MoN.exe (C) by Michi26206 - Programm zum Chatten inerhalb des Netzwerkes
#ce --------------------------------------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ListBoxConstants.au3>
#include <WindowsConstants.au3>
;Variablen anfang
Global $titel = "MoN", $version = "1.0", $Zeilen_Quellecode = "115", $Maindialog, $Chat_Box, $User_Box, $Nachricht_Input, $Senden, $Hilfe, $StatusBar, $Hilfe_Gui, $Hilfe_Button, $Hilfe_Link
;ab hier Chat variablen
Global $Botname = "Ivan", $Username, $Nachricht, $Nachricht_an[3]
;ab hier Netzwerkvariablen
Global $Sende_Socket, $Ip = "5.80.80.50", $Port = 606
;Variablen ende
Username()
[/autoit] [autoit][/autoit] [autoit]HotKeySet("!{v}", "GUI_verstecken")
HotKeySet("!{w}", "GUI_zeigen")
HotKeySet("!{c}", "Close")
MsgBox(64, $titel, "Drücke Alt+V um das Chatfenster zu verstecken" & @CRLF & "Drücke Alt+W um das Chatfenster wiederherzustellen" & @CRLF & "Drücke Alt+B um den Chat sofort zu beenden")
HotKeySet("{ENTER}", "Senden")
TCPStartup()
;--------------------------------------------------------
;--------------- Anfang GUI Maindialog ------------------
;--------------------------------------------------------
$Maindialog = GUICreate($titel, 600, 420, -1, -1)
GUISetBkColor(0xF5A53D)
$Chat_Box = GUICtrlCreateEdit("", 20, 20, 400, 295, BitOR($WS_VSCROLL, $WS_HSCROLL, $ES_READONLY))
GUICtrlSetBkColor($Chat_Box, 0xFFFFFF)
GUICtrlCreateLabel("Nachricht an:", 450, 20, 90)
GUICtrlSetBkColor(-1, 0xF5A53D)
GUICtrlSetFont(-1, 10, 250, 0, "Comic Sans MS")
$User_Box = GUICtrlCreateList("", 450, 45, 120, 270, 0)
$Nachricht_an[1] = GUICtrlSetData($User_Box, "Alle")
$Nachricht_an[2] = GUICtrlSetData($User_Box, "Ivan")
$Nachricht_Input = GUICtrlCreateInput("", 20, 325, 550, 20)
GUICtrlSetState ($Nachricht_Input, $GUI_FOCUS)
$Senden = GUICtrlCreateButton("Senden", 336, 360, 180, 30, 0)
$Hilfe = GUICtrlCreateButton("Hilfe", 57, 360, 180, 30, 0)
$StatusBar = _GUICtrlStatusBar_Create($Maindialog)
Dim $StatusBar_PartsWidth[1] = [150]
_GUICtrlStatusBar_SetParts($StatusBar, $StatusBar_PartsWidth)
_GUICtrlStatusBar_SetText($StatusBar, "Uhrzeit: " & _NowTime(5), 0)
_GUICtrlStatusBar_SetMinHeight($StatusBar, 20)
GUISetState(@SW_SHOW, $Maindialog)
;--------------------------------------------------------
;----------------- Ende GUI Maindialog ------------------
;--------------------------------------------------------
$Sende_Socket = TCPConnect($Ip, $Port)
If @error Then
GUICtrlSetData($Chat_Box, " " & $Botname & ": Ich kann keinen Socket erzeugen. Ist der Computer mit einem Netzwerkverbunden?")
EndIf
;--------------------------------------------------------
;-------------- Anfang GUI Hilfe_gui ----------------
;--------------------------------------------------------
$Hilfe_Gui = GUICreate("Sie haben das Hilfe gefunden!", 350, 120, -1, -1)
GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Ein Programm von Newinto-Projekt:", 10, 10)
$Hilfe_Link = GUICtrlCreateLabel("http://www.newinto-projekt.de.be", 180, 10)
GUICtrlSetColor($Hilfe_Link, 0x0000EE)
GUICtrlCreateLabel($titel & " v. " & $version, 100, 35, 200)
GUICtrlSetFont(-1, 10, 250, 0, "Comic Sans MS")
GUICtrlSetColor(-1, 0xff0000)
GUICtrlCreateLabel("Autor: Michi26206" & @CRLF & $Zeilen_Quellecode & " Zeilen Quellcod", 100, 50)
$Hilfe_Button = GUICtrlCreateButton("Schließen", 150, 90)
;--------------------------------------------------------
;---------------- Ende GUI Hilfe_gui ----------------
;--------------------------------------------------------
AdlibEnable("Uhr", 1000)
TCPSend($Sende_Socket, " >>" & $Username & " betritt den Chat"); & @CRLF & GUICtrlRead($Chat_Box))
Sleep(10)
TCPSend($Sende_Socket, " " & $Botname & ": Willkommen im Chat"); & @CRLF & GUICtrlRead($Chat_Box))
If @error Then
GUICtrlSetData($Chat_Box, GUICtrlRead($Chat_Box) & @CRLF &" " & $Botname & ": Ich kann die Nachricht nicht versenden.")
Else
GUICtrlSetData($Chat_Box, " " & $Botname & ": Willkommen im Chat")
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Close()
Case $Hilfe
WinSetTrans($Hilfe_Gui, "", 0)
GUISetState(@SW_SHOW, $Hilfe_Gui)
For $i = 5 To 255 Step +10
WinSetTrans($Hilfe_Gui, "", $i)
Sleep(20)
Next
Case $Hilfe_Button
WinSetTrans($Hilfe_Gui, "", 255)
For $i = 250 To 0 Step -10
WinSetTrans($Hilfe_Gui, "", $i)
Sleep(20)
Next
GUISetState(@SW_HIDE, $Hilfe_Gui)
Case $Hilfe_Link
Run("http://www.newinto-projekt.de.be")
Case $Senden
Senden()
EndSwitch
Sleep(20)
WEnd
Func Uhr()
_GUICtrlStatusBar_SetText($StatusBar, "Uhrzeit: " & _NowTime(5), 0)
EndFunc ;==>Uhr
Func Username()
Local $iMsgBoxAnswer
$Username = InputBox( "Willkomen beim Chat", "Bitte gib deinen gewünschten Nicknamen ein: ", "", "", 250, 125)
If $Username = "" Then
$iMsgBoxAnswer = MsgBox(4117,"Fehler","Du musst einen Nicknamen angeben!")
Select
Case $iMsgBoxAnswer = 4 ;Wiederholen
Username()
Case $iMsgBoxAnswer = 2 ;Abbrechen
Exit
EndSelect
EndIf
EndFunc ;==>Username
Func Senden()
$Nachricht = GUICtrlRead($Nachricht_Input)
If $Nachricht = "" Or $Nachricht = " " Then
MsgBox(64, "Fehler", "Es kann keine leere Nachricht versendet werden!")
Else
TCPSend($Sende_Socket, $Username & ": " & $Nachricht); & @CRLF & GUICtrlRead($Chat_Box))
If @error Then
GUICtrlSetData($Chat_Box, GUICtrlRead($Chat_Box) & @CRLF &" " & $Botname & ": Ich kann die Nachricht nicht versenden.")
Else
GUICtrlSetData($Chat_Box, GUICtrlRead($Chat_Box) & @CRLF &$Username & ": " & $Nachricht)
EndIf
;GUICtrlSetData($Chat_Box, $Username & ": " & $Nachricht & @CRLF & GUICtrlRead($Chat_Box))
EndIf
GUICtrlSetData($Nachricht_Input, "")
GUICtrlSetState ($Nachricht_Input, $GUI_FOCUS)
EndFunc ;==>Senden
Func GUI_zeigen()
GUISetState(@SW_SHOW, $Maindialog)
GUISetState(@SW_HIDE, $Hilfe_Gui)
EndFunc ;==>GUI_zeigen
Func GUI_verstecken()
GUISetState(@SW_HIDE, $Maindialog)
GUISetState(@SW_HIDE, $Hilfe_Gui)
EndFunc ;==>GUI_verstecken
Func Close()
HotKeySet("{ENTER}")
HotKeySet("!{v}")
HotKeySet("!{w}")
HotKeySet("!{c}")
TCPShutdown()
Exit
EndFunc ;==>Close
Gruß Michi26206
PS: Das ganze ist für die Berufsschule (Ja und ich weiß auch das so etwas nicht sogerne in Schulen gesehen wird xD, aber ich schrieb ihn ja nur )
PSS: Ich hätte nen gekürzten C Windows Code von so nem Chat vom Bruder eines ehemaligen Klassen Kamerads. Soll ich den Posten? Muss aber erst noch fragen ;).Ist aber ziemlich gekürzt ich hab kaum was damit anfangen können. Aber evtl. bekomm ihr es ja hin.