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