Hi,
ich habe einen Client und eine Server in Autoit realisiert. Gibt es eine Möglichkeit die IP des Anfragenen Clients abzurufen und in eine Variable zu speichern?
Kann man auch die MAC Adresse des Client am Server herraus bekommen?
Hi,
ich habe einen Client und eine Server in Autoit realisiert. Gibt es eine Möglichkeit die IP des Anfragenen Clients abzurufen und in eine Variable zu speichern?
Kann man auch die MAC Adresse des Client am Server herraus bekommen?
Die IP-Adresse sollte mit netstat gehen und die MAC-Adresse mit arp.
machs doch ganz einfach
übermittle immer @IPAddress1
Wollte ich ja zuerst, hab aber immernoch Problem, damit das manchmal einfach nichts übermittelt wird:
Das wäre Client - Server aktuell:
CLient:
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.72.5"
$Port = 33891
TCPStartUp()
[/autoit] [autoit][/autoit] [autoit]$ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
TCPSend($ConnectedSocket, $text)
Sleep(3000)
TCPShutdown ()
#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(@ScriptDir & '\datenbank.db')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$strCREATE = _
"CREATE TABLE [Programme] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[name] VARCHAR[50] NULL," & _
"[pfad] VARCHAR[100] NULL," & _
"[kategorie] VARCHAR[30] NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/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[6] NULL," & _
"[pool] VARCHAR[10] NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/autoit] [autoit][/autoit] [autoit]$strCREATE = _
"CREATE TABLE [Zuweisen] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[programmid] INTEGER NULL," & _
"[rechnerid] INTEGER NULL)"
If _SQLite_Exec ( -1, $strCREATE ) <> $SQLITE_OK Then
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
TCPStartup()
$MainSocket = TCPListen(@IPAddress1, 33891, 100 )
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
If $ConnectedSocket <> -1 Then
$recv = TCPRecv($ConnectedSocket, 100)
MsgBox(0,"",$recv)
Sleep(1000)
$empfang = StringSplit($recv,"#")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Local $hQuery, $hZeile = ""
_SQLite_Query(-1,"SELECT ip,name FROM Rechner WHERE ip = '" & $empfang[1] & "'" ,$hQuery)
_SQLite_FetchData($hQuery, $hZeile)
_SQLite_QueryFinalize ($hQuery)
$anzahl = Ubound($hZeile)
MsgBox(0,"",$anzahl)
If $anzahl < 2 Then
MsgBox(0,"","nicht vorhanden")
_SQLite_Exec(-1,"INSERT INTO Rechner (id, ip, mac, name, pool) VALUES (NULL, '"& $empfang[1] & "', '" & $empfang[2] & "', '" & $empfang[3] & "', NULL)")
Else
MsgBox(0,"","vorhanden")
EndIf
EndIF
TCPShutdown()
WEnd
_SQLite_Close()
_SQLite_Shutdown ()
Manchmal gehts drei oder viermal, dann plötzlich einmal nicht dann gehts wieder villeicht fünf mal und einmal dann wieder nicht. Komm einfach nicht dahinter wo das Problem ist. Hab auch mal zum Testen alle @error Meldungen ausgegeben und auch überall mal sleep rein gepackt aber auch ohne großen Erfolg.
Gleiche Problem ist auch wenn in SQLite raus lasse und z.b. MsgBox oder Listfeld rein mache.
if $recv <> "" Then
;foobar
endif
Meinst du also das ich so machen soll, das Client auf eine Bestätigung wartet das die Daten richtig beim Server angekommen sind und wenn diese nicht in einer Zeit von x kommt er die Daten nochmals sendet?
nein umgekehrt, der server soll es überprüfen ob es richtig angekommen ist, du hast da ja $recv = TCPRecv($ConnectedSocket, 100) nachdem machste meine if rein und all das was gemacht werden soll wenn was übertragen worden ist, muss in die if
Ja gut das klar, aber ich muss ja dann dem Client irgendwie mitteilen das die Daten nicht angekommen sind sonst sendet er diese ja nicht noch einmal.
Ja so hatte ich das oben gemeint gehabt. Hat das bisschen verwirrt geschrieben gehabt. Danke für die Hilfe :).
np wenn wieder was ist einfach posten
EDIT 1:
nochn kleiner tipp, ändere
[autoit]$recv = TCPRecv($ConnectedSocket, 100)
[/autoit]
zu
$recv = TCPRecv($ConnectedSocket, 2048)
[/autoit]mfg