Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 23:00

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Chat übers Inter-Netzt??:)

Discussion on Chat übers Inter-Netzt??:) within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
arisha's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 76
Received Thanks: 6
Question Chat übers Inter-Netzt??:)

Hallllliiii halloo, habe einen chat server ....aber der Funzt nur über lan....
Wie mach ich jetzt das der Server ans Netzt geht (ports) und der Client sich mit dem Port verbindet??

Wenn möglich sollen die momentanen Admin befehle bleiben....



Der Server:
Code:
#Include <ButtonConstants.Au3>
#Include <EditConstants.Au3>
#Include <GUIConstantsEx.Au3>
#Include <StaticConstants.Au3>
#Include <WindowsConstants.Au3>
#Include <File.Au3>
#Include <String.Au3>
#NoTrayIcon

Opt ('GUIOnEventMode', 1)

Global $Max = 10, $Socket[$Max + 1], $User[$Max + 1], $Server = -1, $Admin = -1, $Admin_Pw = 'password', $Connected = 0
For $A = 1 To $Max
	$Socket[$A] = -1
	$User[$A] = -1
Next

$GUI = GUICreate ('Server Settings', 180, 100, -1, -1, -1, 128)
GUISetOnEvent  ($GUI_EVENT_CLOSE, '_Exit')
GUICtrlCreateGroup  ('', 5, 0, 170, 94)
$IP = GUICtrlCreateInput (@IpAddress1, 12, 13, 100, 21, 1)
$Port = GUICtrlCreateInput (50, 117, 13, 50, 21, 1)
$Start = GUICtrlCreateButton ('Start', 12, 39, 46, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Start, '_Start')
$Stop = GUICtrlCreateButton ('Stop', 63, 39, 49, 20, $WS_GROUP)
GUICtrlSetState ($Stop, $GUI_DISABLE)
GUICtrlSetOnEvent ($Stop, '_Stop')
$Pw = GUICtrlCreateInput ($Admin_Pw, 12, 65, 100, 21, BitOr (1, $ES_PASSWORD))
$Set = GUICtrlCreateButton ('Set Pw', 118, 66, 49, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Set, '_Set')
GUISetState (@SW_SHOW)
WinSetOnTop ($GUI, '', 1)

While 1
	If $Server <> -1 Then
		If $Connected < $Max Then
			$Accept = TcpAccept ($Server)
			If $Accept <> -1 Then
				If _IsBanned (_SocketGetIP ($Accept)) = 0 Then
					$Open = _Open ()
					$Timer = TimerInit ()
					Do
						Sleep (15)
						$Recv = TcpRecv ($Accept, 1000000)
					Until $Recv <> '' Or TimerDiff ($Timer) >= 500
					If $Recv <> '' Then
						If _Check ($Recv) = 1 Then
							$User[$Open] = $Recv
							$Socket[$Open] = $Accept
							$Connected = $Connected + 1
							_SendAll ('[%Time] ' & $User[$Open] & ' has connected.')
						Else
							TcpSend ($Accept, 'Error:Username.Exists;')
							Sleep (250)
							TcpCloseSocket ($Accept)
						EndIf
					Else
						TcpCloseSocket ($Accept)
					EndIf
				Else
					TcpSend ($Accept, 'Error:IP.Banned;')
					Sleep (250)
					TcpCloseSocket ($Accept)
				EndIf
			EndIf
		ElseIf $Connected = $Max Then
			$Accept = TcpAccept ($Server)
			If $Accept <> -1 Then
				$Timer = TimerInit ()
				Do
					Sleep (15)
					$Recv = TcpRecv ($Accept, 1000000)
				Until $Recv <> '' Or TimerDiff ($Timer) >= 500
				Sleep (250)
				TcpSend ($Accept, 'Error:Max.Connections;')
				TcpCloseSocket ($Accept)
			EndIf
		EndIf
		For $A = 1 To $Max
			If $Socket[$A] <> -1 And $User[$A] <> -1 Then
				$Recv = TcpRecv ($Socket[$A], 1000000)
				If @Error Then _Disconnect ($A)
				If $Recv <> '' Then
					If StringLeft ($Recv, 6) = '.admin' Then
						If $Admin <> -1 Then
							TcpSend ($Socket[$A], '[%Time] Server : An admin is already logged in.')
						Else
							If StringTrimLeft ($Recv, 7) == $Admin_Pw Then
								$Admin = $User[$A]
								_SendAll ('[%Time] ' & $User[$A] & ' is now an admin.')
							Else
								TcpSend ($Socket[$A], '[%Time] Server : Incorrect admin password.')
							EndIf
						EndIf
					ElseIf StringLeft ($Recv, 7) = '.logout' Then
						If $User[$A] == $Admin Then
							$Admin = -1
							_SendAll ('[%Time] ' & $User[$A] & ' is no longer an admin.')
						Else
							TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
						EndIf
					ElseIf StringLeft ($Recv, 5) = '.kick' Then
						If $User[$A] == $Admin Then
							$Who = StringTrimLeft ($Recv, 6)
							If $Who = $Admin Then
								TcpSend ($Socket[$A], '[%Time] Server : You cannot kick an admin.')
							ElseIf _UserGetSocket ($Who) <> -1 Then
								_Disconnect (_UserGetSocket ($Who))
							Else
								TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
							EndIf
						Else
							TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
						EndIf
					ElseIf StringLeft ($Recv, 6) = '.stats' Then
						$Stats = @CRLF & 'Total Online : ' & $Connected & @CRLF
						For $B = 1 To $Max
							If $Socket[$B] <> -1 And $User[$B] <> -1 Then
								$Stats = $Stats & '[' & $B& '] ' & $User[$B] & @CRLF
							EndIf
						Next
						TcpSend ($Socket[$A], $Stats)
					ElseIf StringLeft ($Recv, 3) = '.ip' Then
						If $User[$A] == $Admin Then
							$Who = StringTrimLeft ($Recv, 4)
							$wID = _UserGetSocket ($Who)
							If $wID <> -1 Then
								TcpSend ($Socket[$A], '[%Time] Server : ' & $Who & "'s IP : " & _SocketGetIP ($Socket[$wID]))
							Else
								TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
							EndIf
						Else
							TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
						EndIf
					ElseIf StringLeft ($Recv, 4) = '.ban' Then
						If $User[$A] == $Admin Then
							$Who = StringTrimLeft ($Recv, 5)
							$wID = _UserGetSocket ($Who)
							If $Who = $Admin Then
								TcpSend ($Socket[$A], '[%Time] Server : You cannot ban an admin.')
							ElseIf $wID <> -1 Then
								$IP = _SocketGetIP ($Socket[$wID])
								FileWriteLine ('Banned.txt', $IP)
								For $B = 1 To $Max
									If $Socket[$B] <> -1 And $User[$B] <> -1 Then
										If _SocketGetIP ($Socket[$B]) = $IP Then _Disconnect ($B)
									EndIf
								Next
								_SendAll ('[%Time] IP : ' & $IP & ' has been banned.')
								Sleep (500)
								TcpSend ($Socket[$A], '.log Ban Added : Username : ' & $Who & ', IP : ' & $IP)
							Else
								TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
							EndIf
						Else
							TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
						EndIf
					ElseIf StringLeft ($Recv, 6) = '.unban' Then
						If $User[$A] == $Admin Then
							$IP = StringTrimLeft ($Recv, 7)
							If _IsBanned ($IP) = 1 Then
								_Remove ($IP)
								_SendAll ('[%Time] IP ' & $IP & ' is un-banned.')
								Sleep (500)
								TcpSend ($Socket[$A], '.log Ban Removed : ' & $IP)
							Else
								TcpSend ($Socket[$A], '[%Time] Server : ' & $IP & ' is not banned.')
							EndIf
						Else
							TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
						EndIf
					Else
						_SendAll ('[%Time] ' & $User[$A] & ' says : ' & $Recv)
					EndIf
				EndIf
			EndIf
		Next
	EndIf
	Sleep (15)
WEnd

Func _IsBanned ($Data)
	For $A = 1 To _FileCountLines ('Banned.txt')
		If FileReadLine ('Banned.txt', $A) = $Data Then Return 1
	Next
	Return 0
EndFunc

Func _Remove ($IP)
	$Count = _FileCountLines ('Banned.txt')
	If $Count = 1 And FileReadLine ('Banned.txt', 1) = $IP Then
		FileDelete ('Banned.txt')
	ElseIf $Count > 0 Then
		For $A = 1 To $Count
			$Line = FileReadLine ('Banned.txt', $A)
			If $Line <> $IP Then FileWriteLine ('Banned_Temp.txt', $Line)
		Next
	EndIf
	FileCopy ('Banned_Temp.txt','Banned.txt', 1)
	FileDelete ('Banned_Temp.txt')
EndFunc

Func _SocketGetIP ($Data)
	Local $Struct, $Return
	$Struct = DllStructCreate ('short;ushort;uint;char[8]')
    $Return = DllCall ('Ws2_32.dll','int','getpeername','int', $Data, 'ptr', DllStructGetPtr ($Struct), 'int*', DllStructGetSize($Struct))
	If @Error Or $Return[0] <> 0 Then Return 0
	$Return = DllCall ('Ws2_32.dll','str','inet_ntoa','int', DllStructGetData ($Struct, 3))
	If @Error Then Return 0
	$Struct = 0
	Return $Return[0]
EndFunc

Func _UserGetSocket ($Data)
	For $A = 1 To $Max
		If $User[$A] = $Data Then Return $A
	Next
	Return -1
EndFunc

Func _Check ($Data)
	For $A = 1 To $Max
		If $User[$A] = $Data Then Return 0
	Next
	Return 1
EndFunc

Func _Disconnect ($ID)
	_SendAll ('[%Time] ' & $User[$ID] & ' has disconnected.')
	If $User[$ID] = $Admin Then $Admin = -1
	TcpCloseSocket ($Socket[$ID])
	$Socket[$ID] = -1
	$User[$ID] = -1
	$Connected = $Connected - 1
EndFunc

Func _SendAll ($Msg)
	For $A = 1 To $Max
		If $Socket[$A] <> -1 And $User[$A] <> -1 Then
			TcpSend ($Socket[$A], $Msg)
		EndIf
	Next
EndFunc

Func _Open ()
	For $A = 1 To $Max
		If $Socket[$A] = -1 And $User[$A] = -1 Then Return $A
	Next
EndFunc

Func _Start ()
	If GUICtrlRead ($IP) == '' Or GUICtrlRead ($Port) == '' Then Return @Error
	TcpStartUp ()
	$Server = TcpListen (GUICtrlRead ($IP), GUICtrlRead ($Port))
	If $Server = -1 Or @Error Then
		WinSetOnTop ($GUI, '', 0)
		Sleep (100)
		MsgBox (16, 'Fatal Error','Unable to start the server, change your settings and try again.')
		WinSetOnTop ($GUI, '', 1)
		TcpCloseSocket ($Server)
		_Reset ()
	Else
		GUICtrlSetState ($IP, $GUI_DISABLE)
		GUICtrlSetState ($Port, $GUI_DISABLE)
		GUICtrlSetState ($Start, $GUI_DISABLE)
		GUICtrlSetState ($Stop, $GUI_ENABLE)
	EndIf
EndFunc

Func _Stop ()
	TcpCloseSocket ($Server)
	$Server = -1
	$Connected = 0
	$Admin = -1
	_Reset ()
EndFunc

Func _Set ()
	$Admin_Pw = GUICtrlRead ($Pw)
EndFunc

Func _Reset ()
	For $A = 1 To $Max
		If $Socket[$A] <> -1 Or $User[$A] <> -1 Then
			TcpCloseSocket ($Socket[$A])
			$Socket[$A] = -1
			$User[$A] = -1
		EndIf
	Next
	TcpShutDown ()
	GUICtrlSetState ($IP, $GUI_ENABLE)
	GUICtrlSetState ($Port, $GUI_ENABLE)
	GUICtrlSetState ($Start, $GUI_ENABLE)
	GUICtrlSetState ($Stop, $GUI_DISABLE)
EndFunc

Func _Exit ()
	Exit
EndFunc


Der Client:

Code:
#Include <ButtonConstants.Au3>
#Include <EditConstants.Au3>
#Include <GUIConstantsEx.Au3>
#Include <StaticConstants.Au3>
#Include <WindowsConstants.Au3>
#Include <GUIEdit.Au3>
#Include <Misc.Au3>
#NoTrayIcon 
 
Global $pid = Run("global\load_gui.exe", "", "", "")
Opt ('GUIOnEventMode', 1)
TcpStartUp () 

Global $Server = -1, $Logs  

$Settings = GUICreate ('Connection Settings', 180, 100, -1, -1, -1, 128) 
GUISetOnEvent  ($GUI_EVENT_CLOSE, '_Exit')
GUICtrlCreateGroup  ('', 5, 0, 170, 94)
$IP = GUICtrlCreateInput (IniRead ('Settings.ini','Settings','IP', @IpAddress1), 12, 13, 100, 21, 1)
$Port = GUICtrlCreateInput (IniRead ('Settings.ini','Settings','Port', 50), 117, 13, 50, 21, 1)
$User = GUICtrlCreateInput (IniRead ('Settings.ini','Settings','User','John'), 12, 39, 156, 21, 1)
$Connect = GUICtrlCreateButton ('Connect', 12, 66, 100, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Connect, '_Start')
$Exit = GUICtrlCreateButton ('Exit', 117, 66, 50, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Exit, '_Exit')
GUISetState (@SW_SHOW)
WinSetOnTop ($Settings, '', 1)

$GUI = GUICreate ('TCP Chat Room', 375, 275, -1, -1, -1, 128)
GUISetOnEvent ($GUI_EVENT_CLOSE, '_Toggle')
$History = GUICtrlCreateEdit ('', 0, 1, 375, 203, 2103360 + $ES_MULTILINE)
GUICtrlSetFont ($History, 10, -1, -1, 'Lucida Sans Unicode')
GUICtrlSetBkColor ($History, 0x83B4FC)
GUICtrlSetColor ($History, 0xFFFFFF)
$Send = GUICtrlCreateEdit ('', 0, 205, 375, 70, 2101248)
GUICtrlSetFont ($Send, 10, -1, -1, 'Lucida Sans Unicode')
GUICtrlSetColor ($Send, 0x83B4FC)
GUISetState (@SW_HIDE)

While 1
	Sleep (15)
	If $Server <> -1 Then
		$Recv = TcpRecv ($Server, 1000000)
		If @Error Then
			GUISetState (@SW_HIDE, $GUI)
			WinSetOnTop ($GUI, '', 0)
			Sleep (100)
			MsgBox (48, 'Server Notice','You have been disconnected from the server.')
			_Disconnect ()
		EndIf
		If $Recv = 'Error:Username.Exists;' Then
			GUISetState (@SW_HIDE, $GUI)
			WinSetOnTop ($GUI, '', 0)
			Sleep (100)
			MsgBox (48, 'Server Notice','Your username is already in use, please change it and try again.')
			_Disconnect ()
		ElseIf $Recv = 'Error:Max.Connections;' Then
			GUISetState (@SW_HIDE, $GUI)
			WinSetOnTop ($GUI, '', 0)
			Sleep (100)
			MsgBox (48, 'Server Notice','Max amount of connections reached, try again later.')
			_Disconnect ()
		ElseIf $Recv = 'Error:IP.Banned;' Then
			GUISetState (@SW_HIDE, $GUI)
			WinSetOnTop ($GUI, '', 0)
			Sleep (100)
			MsgBox (48, 'Server Notice','Your IP address has been banned.')
			_Disconnect ()
		ElseIf StringLeft ($Recv, 4) = '.log' Then
			FileWriteLine ('Logged.txt', StringTrimLeft ($Recv, 5))
		ElseIf $Recv <> '' Then
			_Log (StringReplace ($Recv, '%Time', @HOUR & ':' & @MIN))
		EndIf
		If _IsPressed ('0D') And GUICtrlRead ($Send) <> '' And ControlGetFocus ($GUI) = 'Edit2' Then
			$Read = StringReplace (GUICtrlRead ($Send), @CRLF, '')
			$Read = StringReplace ($Read, @CR, '')
			$Read = StringReplace ($Read, @LF, '')
			If $Read = '.clear' Then
				GUICtrlSetData ($History, '')
			ElseIf $Read = '.logs' Then
				_Logs ()
			ElseIf $Read = '.save' Then
				FileWrite (@MDAY & '-' & @MON & '-' & @YEAR & '_' & @HOUR & '-' & @MIN & '-' & @SEC & '_Logs.txt', GUICtrlRead ($History))
			ElseIf $Read = '.disconnect' Or $Read = '.exit' Then
				_Disconnect ()
			Else
				TcpSend ($Server, $Read)
			EndIf
			GUICtrlSetData ($Send, '')
		EndIf
	EndIf
WEnd

Func _Logs ()
	$Logs = GUICreate ('Admin Logs', 375, 203, -1, -1, -1, 128)
	GUISetOnEvent ($GUI_EVENT_CLOSE, '_Delete')
	$Edit = GUICtrlCreateEdit ('', 0, 1, 375, 203, 2103360 + $ES_MULTILINE)
	GUICtrlSetFont ($Edit, 10, -1, -1, 'Lucida Sans Unicode')
	GUICtrlSetBkColor ($Edit, 0x83B4FC)
	GUICtrlSetColor ($Edit, 0xFFFFFF)
	GUISetState (@SW_SHOW)
	GUICtrlSetData ($Edit, FileRead ('Logged.txt'))
	WinSetOnTop ($Logs, '', 1)
EndFunc

Func _Delete ()
	GUIDelete ($Logs)
EndFunc

Func _Disconnect ()
	GUICtrlSetData ($History, '')
	TcpCloseSocket ($Server)
	$Server = -1
	GUISetState (@SW_HIDE, $GUI)
	WinSetOnTop ($GUI, '', 0)
	GUISetState (@SW_SHOW, $Settings)
	WinSetOnTop ($Settings, '', 1)
EndFunc

Func _Toggle ()
	GUICtrlSetData ($History, '')
	TcpCloseSocket ($Server)
	$Server = -1
	GUISetState (@SW_HIDE, $GUI)
	WinSetOnTop ($GUI, '', 0)
	GUISetState (@SW_SHOW, $Settings)
	WinSetOnTop ($Settings, '', 1)
EndFunc

Func _Log ($Data)
	GUICtrlSetData ($History, GUICtrlRead ($History) & $Data & @CRLF)
	_GUICtrlEdit_LineScroll ($History, 0, _GUICtrlEdit_GetLineCount ($History) - 1)
EndFunc

Func _Start () 
	If GUICtrlRead ($User) == '' Or GUICtrlRead ($IP) == '' Or GUICtrlRead ($Port) == '' Then Return @Error
	$Server = TcpConnect (GUICtrlRead ($IP), GUICtrlRead ($Port))
	If $Server = -1 Or @Error Then
		WinSetOnTop ($Settings, '', 0)
		Sleep (100)
		MsgBox (16, 'Fatal Error','Unable to connect to the server, change your settings and try again.')
		WinSetOnTop ($Settings, '', 1)
		Return @Error
	EndIf
	Sleep (150)
	TcpSend ($Server, GUICtrlRead ($User))
	GUISetState (@SW_HIDE, $Settings)
	WinSetOnTop ($Settings, '', 0)
	GUISetState (@SW_SHOW, $GUI)
	WinSetOnTop ($GUI, '', 1)
EndFunc

Func _Exit ()
	IniWrite ('Settings.ini','Settings','IP', GUICtrlRead ($IP))
	IniWrite ('Settings.ini','Settings','Port', GUICtrlRead ($Port))
	IniWrite ('Settings.ini','Settings','User', GUICtrlRead ($User))
	Exit
EndFunc

Thx for Help!!!
arisha is offline  
Old 05/20/2010, 14:37   #2
 
elite*gold: 0
Join Date: Apr 2010
Posts: 2,832
Received Thanks: 4,152
Eigentlich sollte der auch über's Netz gehen.
Falls du 'n Router hast, musst du den Server (zumindest geht das so bei meinem Router) auf deine interne Netzwerk IP forwarden.
Elektrochemie is offline  
Old 05/20/2010, 14:46   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
natürlich geht es nicht so einfach

normalerweise hat ein router eine firewall und die soll ja verhindern, dass jemand von außerhalb großartig ohne genehmigung auf die rechner zugreift.
wenn du deinen rechner wie einen (chat-)server nutzen willst, musst du die entsprechenden ports öffnen.

es wäre aber definitiv schlauer, den chat auf nem richtigen server laufen zu lassen, denn dafür sind die teile ja da.
nur dann kommst du wohl nicht mit autoit weiter
MrSm!th is offline  
Reply


Similar Threads Similar Threads
Übers Hacken :D
09/04/2010 - WarRock - 4 Replies
Also wir alle und ich glaube diese komischen macher von wr wollen ja das die hacker verschwinden..oder besser gesagt das es keine hacks mehr gibt warum machen sie dann nicht regelmäßig ein update...z.B jeden 2-3 tag ein hackshield update
Übers Reinstellen!
03/23/2010 - Combat Arms Hacks, Bots, Cheats & Exploits - 5 Replies
Ich finde es eigentlich mehr alls unnötig das man files oder dateien mehr alls drei mal in einem forum reinstellt . Deshalb fand ich es mal angebrach dies irgendwie zu regeln! Zum beispiel: Das man reinschreibt das der erst Realest ist , Oder das schon in den forum drin ist. Wie weis ich net dehalb bitte ich euch um eure hilfe. Jeder der kein mist reinschreibt grigt ein tanks!!!! zb.:New Publication= Neue Herausgabe
50 € monatlich übers Internet
03/09/2010 - Tutorials - 10 Replies
Auf dieser Seite: GProfit - Warum nicht? könnt ihr mindestens . 50€ monatlich verdienen, kostenlos! Es isn neuer Paidmailer der viel schneller vergütet als sonstige andere. Hier ein paar Gutscheine die ihr beim Anmeldungen eingeben könnt, um sofort Euros zu bekommen: GUTSCHEINE:
Übers AH von Stormwind!
03/31/2007 - WoW Exploits, Hacks, Tools & Macros - 12 Replies
Hallo! Mein Imba Video XD Lied: Korn - Twisted Transistor (Falls es jmd wissen will -.-) !



All times are GMT +1. The time now is 23:03.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.