Hi,
hab etwas an meinem Script geändert und nun ist es nur noch möglich einmal sich von Client zu Verbinden. Hier mal Anleitung zu Fehlerreproduktion, webei es egal ist ob Client und Server auf dem selben Rechner laufen oder nicht. Man muss nur im Client die IP anspassen:
1. Server starten
2. Client starten wobei hier die Verbindung noch geht, die Daten übertragen werden und der Client wieder geschlossen wird.
3. Client erneut starten, Socketverbindung wird garnicht erst aufgebaut
Server:
Spoiler anzeigen
#include <SQLite.au3>
#include <SQLite.dll.au3>
Local $sSQliteDll
$sSQliteDll = _SQLite_Startup ()
If @error > 0 Then
MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
Exit - 1
EndIf
ConsoleWrite("_SQLite_LibVersion=" &_SQLite_LibVersion() & @CR)
_SQLite_Open('datenbank.db')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$strCREATE = _
"CREATE TABLE [Rechner] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[ip] VARCHAR[15] NULL," & _
"[mac] VARCHAR[17] NULL," & _
"[name] VARCHAR[50] NULL," & _
"[kategorie] INTEGER NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/autoit] [autoit][/autoit] [autoit]$strCREATE = _
"CREATE TABLE [Zuweisenrechner] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[programmname] VARCHAR[50] NULL," & _
"[rechnername] VARCHAR[50] NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/autoit] [autoit][/autoit] [autoit]$strCREATE = _
"CREATE TABLE [Zuweisenkategorie] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[programmname] VARCHAR[50] NULL," & _
"[kategorie] VARCHAR[50] NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_SQLite_Close()
_SQLite_Shutdown ()
TCPStartup()
While 1
$MainSocket = TCPListen(@IPAddress1, 33891, 100 )
[/autoit] [autoit][/autoit] [autoit]while 1
$ConnectedSocket = TCPAccept($MainSocket)
If $ConnectedSocket <> -1 Then ExitLoop
Sleep(100)
WEnd
TCPSend($ConnectedSocket,"1")
[/autoit] [autoit][/autoit] [autoit]Do
$recv = TCPRecv($ConnectedSocket, 2048)
Sleep(100)
Until $recv <> ""
_SQLite_Startup ()
_SQLite_Open('H:\Packages\ProgrammeAutoit\datenbank.db')
$empfang = StringSplit($recv,"#")
[/autoit] [autoit][/autoit] [autoit]Local $hQuery, $hZeile = ""
_SQLite_Query(-1,"SELECT ip,name FROM Rechner WHERE mac = '" & $empfang[2] & "'" ,$hQuery)
_SQLite_FetchData($hQuery, $hZeile)
_SQLite_QueryFinalize ($hQuery)
$anzahl = Ubound($hZeile)
[/autoit] [autoit][/autoit] [autoit]If $anzahl < 2 Then
_SQLite_Exec(-1,"INSERT INTO Rechner (id, ip, mac, name, kategorie) VALUES (NULL, '"& $empfang[1] & "', '" & $empfang[2] & "', '" & $empfang[3] & "', 'keine')")
Else
EndIf
[/autoit] [autoit][/autoit] [autoit]_SQLite_Close()
_SQLite_Shutdown ()
WEnd
TCPShutdown()
_SQLite_Close()
_SQLite_Shutdown ()
Client
Spoiler anzeigen
Func _GetMACFromIP($sIP=@IPAddress1, $mode = 1)
Local $MAC, $MACSize
Local $i, $s, $r, $iIP
$MAC = DllStructCreate("byte[6]")
$MACSize = DllStructCreate("int")
DllStructSetData($MACSize, 1, 6)
$r = DllCall("Ws2_32.dll", "int", "inet_addr", _
"str", $sIP)
$iIP = $r[0]
$r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
$s = ""
If $mode = 0 Then
For $i = 0 To 5
$s &= Hex(DllStructGetData($MAC, 1, $i + 1), 2)
Next
ElseIf $mode = 1 Then
For $i = 0 To 5
If $i Then $s = $s & ":"
$s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
Next
ElseIf $mode = 2 Then
For $i = 0 To 5
If $i Then $s = $s & "-"
$s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
Next
EndIf
Return $s
EndFunc
Do
Local $macadresse = ""
$macadresse = _GetMACFromIP()
Until $macadresse <> ""
$text = @IPAddress1 & "#" & $macadresse & "#" & @ComputerName
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Empfaenger_IP = "193.196.108.32"
$Port = 33891
TCPStartUp()
$ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
Do
$recv = TCPRecv($ConnectedSocket, 2048)
Sleep(100)
Until $recv <> ""
TCPSend($ConnectedSocket, $text)
Sleep(2000)
TCPShutdown ()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]