Der Chat den ich hier gemacht hab, hab ich eig. für die Schule gemacht, dass man mit einem anderen Chatten zu können.
Wäre echt nett wenn ihr mir noch Verbesserungsmöglichkeiten sagen könntet oder Bugs melden.
Ihr müsst das Programm an zwei PCs gestartet haben (Ihr könnt auch das Programm auch nur einmal öffnen und...) und dann bei jedem PC im Programm die IDs vom anderen PC eingeben ( ... einfach die eigene ID eingeben.) und dann auf "Verbindung herstellen..." drücken.
Spoiler anzeigen
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=C:\Users\Daniel\Desktop\2.kxf
Global $GUI = GUICreate("LoKaL ChAt", 616, 516, -1, -1)
Global $chat = GUICtrlCreateEdit("", 0, 104, 609, 305, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
GUICtrlSetData(-1, "")
Global $out = GUICtrlCreateEdit("", 0, 416, 537, 97, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
GUICtrlSetData(-1, "")
Global $senden = GUICtrlCreateButton("Senden", 544, 424, 65, 81, 0)
GUICtrlCreateGroup("Partner Infos", 8, 8, 209, 89)
GUICtrlCreateLabel("Name :", 24, 39, 47, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlCreateLabel("ID :", 24, 71, 23, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
Global $p_id = GUICtrlCreateInput("", 72, 63, 129, 24)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $p_name = GUICtrlCreateInput("Verbindung getrennt...", 72, 31, 129, 24)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("Eigene Infos", 224, 8, 209, 89)
GUICtrlCreateLabel("ID :", 240, 72, 23, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlCreateLabel("Name :", 240, 40, 47, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
Global $e_name = GUICtrlCreateInput(@UserName, 288, 32, 129, 24)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $e_id = GUICtrlCreateInput(@IPAddress1, 288, 64, 129, 24)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $connect = GUICtrlCreateButton("Verbinung herstellen...", 440, 8, 169, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetState($e_id, $GUI_DISABLE)
GUICtrlSetState($p_name, $GUI_DISABLE)
TCPStartup()
Global $server = TCPListen(@IPAddress1, 4321)
Global $chat_active = 0, $wait_time_nicksend = TimerInit()
[/autoit] [autoit][/autoit] [autoit]While 1
If $chat_active = 1 Then
If WinGetState ($GUI) = 15 Then
If _IsPressed ("0D") Then
If GUICtrlRead ($out) = "" Then
Else
While 1
If Not _IsPressed ("0D") Then _Send()
Sleep (20)
WEnd
EndIf
EndIf
EndIf
If TimerDiff($wait_time_nicksend) > 1000 Then
_TCPSend("#NICK# " & GUICtrlRead($e_name), GUICtrlRead($p_id), 4321)
Global $wait_time_nicksend = TimerInit()
EndIf
EndIf
Global $eingehende_nachricht = _TCPGetMessage($server)
If Not $eingehende_nachricht = 0 Then
Global $check = _CodeCheck($eingehende_nachricht)
If $check[1] = 0 Then
If $chat_active = 0 Then
_TCPSend( "#ERROR# 0x001" , GUICtrlRead($p_id), 4321)
Else
GUICtrlSetData ( $chat , GUICtrlRead ($chat) & GUICtrlRead ($p_name) & " schrieb: " & $check[2] & @CRLF)
EndIf
ElseIf $check[1] = 2 Then
GUICtrlSetData ( $p_name , $check[2] )
ElseIf $check[1] = 1 Then
MsgBox (0,"ERROR " & $check[2] , "Der Chatpartner hat die Verbindung noch nicht hergestellt.")
EndIf
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_Chat ( "Off" )
TCPShutdown()
Exit
Case $connect
If $chat_active = 0 Then
_Chat("On")
Else
_Chat("Off")
EndIf
Case $senden
If $chat_active = 1 Then
If GUICtrlRead($p_name) = "" Then
MsgBox(0, "ERROR", "Der Chatpartener ist noch nicht erreichbar.")
Else
If Not GUICtrlRead($out) = "" Then
Global $tcp_send = _TCPSend(GUICtrlRead($out), GUICtrlRead($p_id), 4321)
If $tcp_send = 1 Then
GUICtrlSetData($chat, GUICtrlRead($chat) & GUICtrlRead($e_name) & " schrieb: " & GUICtrlRead($out) & @CRLF)
GUICtrlSetData($out, "")
ElseIf $tcp_send = -1 Then
MsgBox(0, "ERROR", "Chatapartner konnte nicht erreicht werden.")
ElseIf $tcp_send = -2 Then
MsgBox(0, "ERROR", "Die Nachricht konnte nicht übermittelt werden.")
EndIf
EndIf
EndIf
EndIf
EndSwitch
Sleep (20)
WEnd
Func _Send ()
Global $tcp_send = _TCPSend ( GUICtrlRead ($out) , GUICtrlRead ($p_id) , 4321 )
If $tcp_send = 1 Then
GUICtrlSetData ($chat , GUICtrlRead ($chat) & GUICtrlRead ($e_name) & " schrieb: " & GUICtrlRead($out) & @CRLF)
GUICtrlSetData ($out , "" )
EndIf
EndFunc
Func _Chat($state)
If $state = "On" Then
If GUICtrlRead($e_name) = "" Or GUICtrlRead($p_id) = "" Then
MsgBox(0, "Error", "Du musst alle Eingabefelder ausgefüllt haben.")
Else
$chat_active = 1
GUICtrlSetData($connect, "Verbindung trennen...")
GUICtrlSetState($e_name, $GUI_DISABLE)
GUICtrlSetState($p_id, $GUI_DISABLE)
EndIf
ElseIf $state = "Off" Then
_TCPSend ( "#NICK# Verbindung getrennt..." , GUICtrlRead ($p_id) , 4321 )
GUICtrlSetData ($p_name , "Verbindung getrennt..." )
$chat_active = 0
GUICtrlSetData($connect, "Verbindung herstellen...")
GUICtrlSetState($e_name, $GUI_ENABLE)
GUICtrlSetState($p_id, $GUI_ENABLE)
EndIf
EndFunc ;==>_Chat
Func _CodeCheck($string)
Dim $back[3]
If StringLeft($string, 7) = "#ERROR#" Then
$back[1] = 1
$back[2] = StringRight($string, 5)
Return ($back)
ElseIf StringLeft($string, 6) = "#NICK#" Then
$back[1] = 2
$back[2] = StringRight($string, StringLen($string) - 7)
Return ($back)
Else
$back[1] = 0
$back[2] = $string
Return ($back)
EndIf
EndFunc ;==>_CodeCheck
Func _TCPGetMessage($to_tcp_server)
Local $tcp_accept = TCPAccept($to_tcp_server)
If $tcp_accept <> -1 Then
Local $message = TCPRecv($tcp_accept, 1024)
Return ($message)
TCPCloseSocket($tcp_accept)
EndIf
EndFunc ;==>_TCPGetMessage
Func _TCPSend($message, $ip, $port)
Local $tcp_connect = TCPConnect($ip, $port)
If $tcp_connect = -1 Then
Return (-1)
Else
Local $tcp_send = TCPSend($tcp_connect, $message)
If $tcp_send = 0 Then
Return (-2)
Else
Return (1)
EndIf
EndIf
EndFunc ;==>_TCPSend
!!! BITTE RÜCKMELDUNG !!!