Hey Leute ich hab man nen UDP-chat geschrieben.
hab leider keine 2 pcs darum kann ich nicht fertigschreiben.
brauche nämlich 2 ips
immoment noch über 2 ports geregelt
wer lust hat, da mal ein paar variablen zuvertauschen
ich würds selber tun kanns aber nicht testen
hier die scripte:
Spoiler anzeigen
Server:
[autoit]#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <arraymore.au3>
;### Einstellungen ###
$Ip = "127.0.0.1"
$port = 80
;### Einleitung ###
ConsoleWrite("Multichat Copyright 2011 Buphx" & @CRLF & @CRLF)
ConsoleWrite("Einstellungen:" & @CRLF _
& "Ip: " & $Ip & @CRLF _
& "Port: " & $port & @CRLF)
HotKeySet("{esc}", "end")
UDPStartup()
$bind = UDPBind($Ip, $port) ;socket erstellen
Global $empf, $online
While 1
While $empf = ""
$empf = UDPRecv($bind, 2048)
WEnd
If StringInStr($empf, "Offline||") Then
_setOffline(StringReplace($empf, "Offline||", ""))
$empf = ""
ElseIf StringInStr($empf, "Online||") Then
_setOnline(StringReplace($empf, "Online||", ""))
$empf = ""
ElseIf StringInStr($empf, "Refresh||") Then
_ONsendlist(StringReplace($empf, "Refresh||", ""))
$empf = ""
Else
$aEmpf = StringSplit($empf, "|")
$empf = ""
_ArrayDelete($aEmpf, 0)
ConsoleWrite($aEmpf[0] & " --> " & $aEmpf[1] & ": " & $aEmpf[3] & @CRLF)
$send = UDPOpen("127.0.0.1", $aEmpf[2])
UDPSend($send, $aEmpf[0] & ": " & $aEmpf[3])
UDPCloseSocket($send)
EndIf
WEnd
Func end()
Exit
EndFunc ;==>end
Func _setOffline($Ip)
ConsoleWrite($Ip & " --> Offline" & @CRLF)
StringReplace($online, $Ip & "|", "")
EndFunc ;==>_setOffline
Func _setOnline($Ip)
ConsoleWrite($Ip & " --> Online" & @CRLF)
$online &= $Ip & "|"
EndFunc ;==>_setOnline
Func _ONsendlist($IPuPORT)
$aIPuPORT=StringSplit($IPuPORT,":")
ConsoleWrite($aIPuPORT[1] & ': "Refresh"' & @CRLF)
$sendlist = UDPOpen($aIPuPORT[1], $aIPuPORT[2])
UDPSend($sendlist, "Refresh||" & $online)
UDPCloseSocket($sendlist)
EndFunc ;==>_ONsendlist
Spoiler anzeigen
client1
[autoit]#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#include <array.au3>
OnAutoItExitRegister("exitfunc")
;### Gui ###
$Form1 = GUICreate("client1", 621, 444, 190, 161)
$Msgs = GUICtrlCreateEdit("", 16, 8, 433, 345,$ES_READONLY)
$Senden = GUICtrlCreateButton("Senden", 464, 368, 145, 65)
$Text = GUICtrlCreateEdit("", 16, 368, 433, 65, $ES_MULTILINE)
$List1 = GUICtrlCreateList("", 464, 8, 145, 310)
GUICtrlSetLimit($List1, 1000)
$Refresh = GUICtrlCreateButton("Refresh", 464, 320, 145, 30)
GUISetState(@SW_SHOW)
;### einstellungen ###
Global $serverport = 80, $serverip = "127.0.0.1", $myip = "127.0.0.1", $dsip = "127.0.0.1", $dsport = 82, $myport = 81
UDPStartup()
_online() ; Beim Server anmelden und die Onlineliste abfragen
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Senden ;Button "senden"
_Send($serverip, $serverport, $myip, $dsip, $dsport, GUICtrlRead($Text))
GUICtrlSetData($Text, "")
Case $Refresh
_NeedRefresh()
EndSwitch
$empf = ""
$empf = UDPRecv($bind, 2048)
If StringInStr($empf, "Refresh||") Then
_refreshlist(StringReplace($empf, "Refresh||", ""))
ElseIf $empf <> "" Then
GUICtrlSetData($Msgs, GUICtrlRead($Msgs) & @CRLF & @HOUR&":"&@MIN&":"&@SEC&" "& $empf)
EndIf
WEnd
Func _send($servip, $servport, $ip, $dsip, $dsport, $Text = "testmail")
$open = UDPOpen($servip, $servport)
$status = UDPSend($open, $dsip & "|" & $ip & "|" & $dsport & "|" & $Text)
UDPCloseSocket($open)
ConsoleWrite($status)
EndFunc ;==>_send
Func exitfunc()
$offline = UDPOpen($serverip, $serverport)
UDPSend($offline, "Offline||127.0.0.1")
UDPCloseSocket($bind)
UDPCloseSocket($offline)
UDPShutdown()
EndFunc ;==>exitfunc
Func _refreshlist($ips)
$ips = StringSplit($ips, "|")
GUICtrlSetData($List1, "")
For $i = 1 To $ips[0] - 1
GUICtrlSetData($List1, $ips[$i] & "|")
Next
EndFunc ;==>_refreshlist
Func _NeedRefresh()
$Need = UDPOpen($serverip, $serverport)
UDPSend($Need, "Refresh||127.0.0.1:" & $myport)
UDPCloseSocket($Need)
ConsoleWrite("refresh")
EndFunc ;==>_NeedRefresh
Func _online()
Global $bind = UDPBind("127.0.0.1", $myport)
$online = UDPOpen($serverip, $serverport)
UDPSend($online, "Online||127.0.0.1")
_NeedRefresh()
EndFunc ;==>_online
Spoiler anzeigen
Client2
[autoit]#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#include <array.au3>
OnAutoItExitRegister("exitfunc")
;### Gui ###
$Form1 = GUICreate("client1", 621, 444, 190, 161)
$Msgs = GUICtrlCreateEdit("", 16, 8, 433, 345,$ES_READONLY)
$Senden = GUICtrlCreateButton("Senden", 464, 368, 145, 65)
$Text = GUICtrlCreateEdit("", 16, 368, 433, 65, $ES_MULTILINE)
$List1 = GUICtrlCreateList("", 464, 8, 145, 310)
GUICtrlSetLimit($List1, 1000)
$Refresh = GUICtrlCreateButton("Refresh", 464, 320, 145, 30)
GUISetState(@SW_SHOW)
;### einstellungen ###
Global $serverport = 80, $serverip = "127.0.0.1", $myip = "127.0.0.1", $dsip = "127.0.0.1", $dsport = 81, $myport = 82
UDPStartup()
_online() ; Beim Server anmelden und die Onlineliste abfragen
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Senden ;Button "senden"
_Send($serverip, $serverport, $myip, $dsip, $dsport, GUICtrlRead($Text))
GUICtrlSetData($Text, "")
Case $Refresh
_NeedRefresh()
EndSwitch
$empf = ""
$empf = UDPRecv($bind, 2048)
If StringInStr($empf, "Refresh||") Then
_refreshlist(StringReplace($empf, "Refresh||", ""))
ElseIf $empf <> "" Then
GUICtrlSetData($Msgs, GUICtrlRead($Msgs) & @CRLF & @HOUR&":"&@MIN&":"&@SEC&" "& $empf)
EndIf
WEnd
Func _send($servip, $servport, $ip, $dsip, $dsport, $Text = "testmail")
$open = UDPOpen($servip, $servport)
$status = UDPSend($open, $dsip & "|" & $ip & "|" & $dsport & "|" & $Text)
UDPCloseSocket($open)
ConsoleWrite($status)
EndFunc ;==>_send
Func exitfunc()
$offline = UDPOpen($serverip, $serverport)
UDPSend($offline, "Offline||127.0.0.1")
UDPCloseSocket($bind)
UDPCloseSocket($offline)
UDPShutdown()
EndFunc ;==>exitfunc
Func _refreshlist($ips)
$ips = StringSplit($ips, "|")
GUICtrlSetData($List1, "")
For $i = 1 To $ips[0] - 1
GUICtrlSetData($List1, $ips[$i] & "|")
Next
EndFunc ;==>_refreshlist
Func _NeedRefresh()
$Need = UDPOpen($serverip, $serverport)
UDPSend($Need, "Refresh||127.0.0.1:" & $myport)
UDPCloseSocket($Need)
ConsoleWrite("refresh")
EndFunc ;==>_NeedRefresh
Func _online()
Global $bind = UDPBind("127.0.0.1", $myport)
$online = UDPOpen($serverip, $serverport)
UDPSend($online, "Online||127.0.0.1")
_NeedRefresh()
EndFunc ;==>_online
(der unterschied Client 1&2 sind die ports in reihe 20)
mfg
Buphx