hey,
hatte das Problem, dass auf meinen Server nicht meherere Clienten connecten können.
Zur Hilfe hat mir Sprenger120
was gebastelt ![]()
bloß habe ich das Problem, das jetzt gar nichts mehr geht. Es kommt nichts am Server an.
Altes Script: (wo alles funktionierte
)
Server:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <String.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
;==============================================
;==============================================
DirCreate("C:\Message\")
Global $open
Global Const $MAXCON = 50;
Global $aClients[$MAXCON + 1][3]
$aClients[0][0] = $MAXCON
Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
; Richte einige wiederverwendbare Informationen ein.
; Richte deine öffentliche IP Adresse (@IPAddress1) hier ein.
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted, $ip, $host, $time
Local $msg, $recv
; Startet den TCP Service
;==============================================
TCPStartup()
; Erstellt einen lauschenden Port.
; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT, $MAXCON)
; Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
If $MainSocket = -1 Then Exit
; Erstellt eine GUI für Messages.
;==============================================
$GOOEY = GUICreate("Message - Server IP: " & $szIPADDRESS, 550, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
GUISetState()
; Initialisiert eine Variable um eine Verbindung anzugeben
;==============================================
$ConnectedSocket = -1
; Wartet auf und akzeptiert eine Verbindung
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
; Bekommt die IP des verbundenen Clients
$szIP_Accepted = SocketToIP($ConnectedSocket)
; GUI Message Schleife
;==============================================
While 1
$msg = GUIGetMsg()
; GUI beendet
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; Versucht Daten zu empfangen, bis zu 2048 bytes
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 30000)
; Aktualisiert das Input-Control mit dem, was wir empfangen haben.
;----------------------------------------------------------------
If $recv <> "" Then
GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
$ip = _StringBetween($recv, "IP Adresse: ", " Computername:")
$host = _StringBetween($recv, "Computername: ", " Zeit des Clienten:")
$time = StringRight($recv, ![]()
IniWrite(@ScriptDir & "\recieved.ini", $ip[0], $host[0], $time)
EndIf
WEnd
If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]TCPShutdown()
EndFunc ;==>Example
Func TCPAcc()
$hAcc = TCPAccept($MainSocket)
If $hAcc > 0 Then _AddClient($hAcc)
EndFunc ;==>TCPAcc
; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
[/autoit] [autoit][/autoit] [autoit]$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc ;==>SocketToIP
Client:
Spoiler anzeigen
TCPStartup(); wird nur einmal aufgerufen
[/autoit] [autoit][/autoit] [autoit]Global $szIPADDRESS = "10.110.100.135"
Global $nPORT = 33891
Global $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
AdlibRegister('_client', 5000); rufe die func _client alle 5 sec auf
While 1
Sleep(100)
WEnd
Func _client ()
$szData = "IP Adresse: " & @IPAddress1 & " Computername: " & @ComputerName & " Zeit des Clienten: " & @HOUR & ":" & @MIN & ":" & @SEC
TCPSend($ConnectedSocket, $szData)
EndFunc ;==>_client
Func _quit()
TCPShutdown()
EndFunc ;==>_quit
Neues Script: ( mit mehrfach Verbindungen des Clients, welches nicht funktioniert^^ )
Server:
Spoiler anzeigen
#include <Date.au3>
Opt("GUIOnEventMode", 1)
TCPStartup()
Global $IP = @IPAddress1
Global $Port = 2134
Global Const $MaxPendingConnection = 2 ;Maximal zugelassende Verbindungen
Global $Socket = TCPListen($IP, $Port)
Dim $Verbindungen[$MaxPendingConnection][4]
[/autoit] [autoit][/autoit] [autoit]For $x = 0 To UBound($Verbindungen) - 1 ;Array mit -1 befüllen
$Verbindungen[$x][0] = -1
$Verbindungen[$x][1] = -1
$Verbindungen[$x][2] = -1
$Verbindungen[$x][3] = -1
Next
$gui = GUICreate("Message - Server IP: " & $IP, 550, 200)
GUISetOnEvent(-3, "_Exit")
$edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
GUISetState()
;[0] = SocketID ; [1] = IP ;[2]=Timer ;[3]=PC name
While 1
For $x = 0 To UBound($Verbindungen) - 1
If $Verbindungen[$x][0] = -1 Then
$Verbindungen[$x][0] = TCPAccept($Socket)
If $Verbindungen[$x][0] <> -1 Then
$Timer = TimerInit()
Do
$Resv = TCPRecv($Verbindungen[$x][0], 1024)
Until TimerDiff($Timer) >= 2000 Or $Resv <> ""
If $Resv <> "" Then
$Verbindungen[$x][1] = SocketToIP($Verbindungen[$x][0])
$Verbindungen[$x][3] = $Resv
ConsoleWrite("Neuer Client:" & $Verbindungen[$x][3] & @CRLF)
Else
TCPCloseSocket($Verbindungen[$x][0])
$Verbindungen[$x][0] = -1
$Verbindungen[$x][1] = -1
$Verbindungen[$x][2] = -1
$Verbindungen[$x][3] = -1
EndIf
EndIf
EndIf
$Resv = TCPRecv($Verbindungen[$x][0], 1024)
If @error And $Verbindungen[$x][0] <> -1 Then
ConsoleWrite("Client " & $Verbindungen[$x][3] & " hat den Server verlassen" & @CRLF)
TCPCloseSocket($Verbindungen[$x][0])
$Verbindungen[$x][0] = -1
$Verbindungen[$x][1] = -1
$Verbindungen[$x][2] = -1
$Verbindungen[$x][3] = -1
EndIf
If $Resv <> "" And $Verbindungen[$x][0] <> -1 Then
GUICtrlSetData($edit, _
$Verbindungen[$x][1] & " > " & $Resv & @CRLF & GUICtrlRead($edit))
$IP = $Verbindungen[$x][1]
$host = $Verbindungen[$x][3]
IniWrite(@ScriptDir & "\recieved.ini",$host,_Now() ,$Resv)
EndIf
Next
WEnd
; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
[/autoit] [autoit][/autoit] [autoit]$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc ;==>SocketToIP
Func _Exit()
For $x = 0 To UBound($Verbindungen) - 1
TCPCloseSocket($Verbindungen[$x][0])
Next
TCPShutdown()
Exit
EndFunc ;==>_Exit
Client:
Spoiler anzeigen
TCPStartup(); wird nur einmal aufgerufen
[/autoit] [autoit][/autoit] [autoit]Global $szIPADDRESS = "10.110.100.135"
Global $nPORT = 33891
Global $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
TCPSend($ConnectedSocket,@ComputerName)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]AdlibRegister('_client', 5000); rufe die func _client alle 5 sec auf
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func _client ()
$szData = "IP Adresse: " & @IPAddress1 & " Computername: " & @ComputerName & " Zeit des Clienten: " & @HOUR & ":" & @MIN & ":" & @SEC
TCPSend($ConnectedSocket, $szData)
EndFunc ;==>_client
Func _quit()
TCPShutdown()
EndFunc ;==>_quit
Hoffe mal ihr könnt helfen
wär nett
Gruß
Kev