das is mir schonklar das ich das tun muss, aber wie das ist die große frage
Server - Client tcp
-
- [ offen ]
-
Kev -
15. März 2010 um 08:37 -
Geschlossen -
Erledigt
-
-
kaaaay habs, thx schnitzel.
next thing
das was der server recv. solla in ne text datei spiechern.
macht er auch, bloß soller nach jedem ding was er kriegt,in ne neue zeile gehen, sprich enter drücken und da dann weiter machen.das wenn ich den clienten hier jetz.
auf 100 rechnern hab.den ersten reinschreibt mit: ahh auch gute iddee. genau
PC1: IP/Computername/Time
PC2:IP/Computername/Time
unsoweiter...immer in ner neuen zeile.
server quellcode ist:;
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit];==============================================
[/autoit] [autoit][/autoit] [autoit]
;==============================================
; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
;==============================================
;==============================================
dircreate("C:\Message\")
Example()Func Example()
[/autoit] [autoit][/autoit] [autoit]
; 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
Local $msg, $recv; Startet den TCP Service
[/autoit] [autoit][/autoit] [autoit]
;==============================================
TCPStartup(); Erstellt einen lauschenden Port.
[/autoit] [autoit][/autoit] [autoit]
; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT); Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $MainSocket = -1 Then Exit; Erstellt eine GUI für Messages.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$GOOEY = GUICreate("Message - Server IP: " & $szIPADDRESS, 550, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
GUISetState(); Initialisiert eine Variable um eine Verbindung anzugeben
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$ConnectedSocket = -1; Wartet auf und akzeptiert eine Verbindung
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1; Bekommt die IP des verbundenen Clients
[/autoit] [autoit][/autoit] [autoit]
$szIP_Accepted = SocketToIP($ConnectedSocket); GUI Message Schleife
[/autoit] [autoit][/autoit] [autoit]
;==============================================
While 1
$msg = GUIGetMsg(); GUI beendet
[/autoit] [autoit][/autoit] [autoit]
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop; Versucht Daten zu empfangen, bis zu 2048 bytes
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 30000); Aktualisiert das Input-Control mit dem, was wir empfangen haben.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Filewrite("C:/Message/recieved.txt",$recv)
WEndIf $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]TCPShutdown()
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>Example; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------------
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, _
[/autoit] [autoit][/autoit] [autoit]
"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
[/autoit] [autoit][/autoit] [autoit][/autoit]
EndFunc ;==>SocketToIPwichtige wäre hierbei denne:
[autoit]If $recv <> "" Then GUICtrlSetData($edit, _
[/autoit]
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Filewrite("C:/Message/recieved.txt",$recv) -
an datei unten anhängen würde so gehn
[autoit]$open = FileOpen ("C:/Message/recieved.txt", 1)
[/autoit]
Filewrite($open, $recv)
FileClose($open) -
an was wo wie?
schnitzel drück dich bitte besser aus wo was ranhängen und was bringt des -
an was wo wie?
schnitzel drück dich bitte besser aus wo was ranhängen und was bringt desDas ist genau, wenn du an die Datei anhaengen willst, die 3 Textzeilen durchsuchen und man wuerde es sogar ohne zusaetzlichen Text herausfinden
-
kay und wohin damit?^^
-
hö?
du schreibst doch:
Zitatdas was der server recv. solla in ne text datei spiechern.
macht er auch, bloß soller nach jedem ding was er kriegt,in ne neue zeile gehen, sprich enter drücken und da dann weiter machen.damit du in eine textdatei schreibst ohne das darüberliegende zu löschen musst kannst du es so machen wie ich gepostet habe.
[autoit]$open = FileOpen ("C:/Message/recieved.txt", 1)
[/autoit]
; natürlich nur eins der beiden
Filewrite($open, $recv); wenn @CrLf schon in $recv steht.
Filewrite($open, @CrLf & $recv); wenn du in $recv noch keinen zeilenumbruch hast
FileClose($open) -
kay jetzt hab ich das Problem das der ne leere textdatei hat. die wird zwar größer und größer aber es steht nix drin
//edit
doch^^ er machts
ermacht 1000 mal @crlf
und dann schreibter das rein
dann wieda 1000 ma @crlf un weiter^^ -
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit];==============================================
[/autoit] [autoit][/autoit] [autoit]
;==============================================
; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
;==============================================
;==============================================
dircreate("C:\Message\")global $open
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
[/autoit] [autoit][/autoit] [autoit]
; 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
Local $msg, $recv; Startet den TCP Service
[/autoit] [autoit][/autoit] [autoit]
;==============================================
TCPStartup(); Erstellt einen lauschenden Port.
[/autoit] [autoit][/autoit] [autoit]
; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT); Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $MainSocket = -1 Then Exit; Erstellt eine GUI für Messages.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$GOOEY = GUICreate("Message - Server IP: " & $szIPADDRESS, 550, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
GUISetState(); Initialisiert eine Variable um eine Verbindung anzugeben
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$ConnectedSocket = -1; Wartet auf und akzeptiert eine Verbindung
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1; Bekommt die IP des verbundenen Clients
[/autoit] [autoit][/autoit] [autoit]
$szIP_Accepted = SocketToIP($ConnectedSocket); GUI Message Schleife
[/autoit] [autoit][/autoit] [autoit]
;==============================================
While 1
$msg = GUIGetMsg(); GUI beendet
[/autoit] [autoit][/autoit] [autoit]
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop; Versucht Daten zu empfangen, bis zu 2048 bytes
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 30000); Aktualisiert das Input-Control mit dem, was wir empfangen haben.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Filewrite("C:/Message/recieved.txt",$recv)
$open = FileOpen ("C:/Message/recieved.txt", 1)
Filewrite($open, @CrLf & $recv); wenn du in $recv noch keinen zeilenumbruch hast
FileClose($open)
WEndIf $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]TCPShutdown()
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>Example; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------------
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, _
[/autoit] [autoit][/autoit] [autoit]
"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
[/autoit] [autoit][/autoit] [autoit][/autoit]
EndFunc ;==>SocketToIPso hab ichs jetzt.
er erstellt den text macht 1000 mal enter, schreibst wieda rein und wieda 1000 mal enter
liegts an der while schleife?! bzw if yes, wiebau ich das dem entsprechend um? -
was für n gemeiner fehler
ändere das:
[autoit]If $recv <> "" Then GUICtrlSetData($edit, _
[/autoit]
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Filewrite("C:/Message/recieved.txt",$recv)
$open = FileOpen ("C:/Message/recieved.txt", 1)
Filewrite($open, @CrLf & $recv); wenn du in $recv noch keinen zeilenumbruch hast
FileClose($open)in das:
[autoit]If $recv <> "" Then
[/autoit]
GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Filewrite("C:/Message/recieved.txt",$recv)
$open = FileOpen ("C:/Message/recieved.txt", 1)
Filewrite($open, @CrLf & $recv); wenn du in $recv noch keinen zeilenumbruch hast
FileClose($open)
endif -
fast
jetz macht ers so:
Spoiler anzeigen
[Blockierte Grafik: http://www9.picfront.org/token/7tZI/2010/03/17/1787490.png]
bzw kann ich net iwie sagen
. 1 IP:
. 2 IP:
. 3 IP:und da die die daten alle 30 minuten kommen soller den alten eintrag in der txt mit dem neuen löschen^^
aber nur mit der dazugehörenden ip.also wenn das ding auf 20 rechner kommt, und jeder ne andere ip hat. soller den alten eintrag mit der ip in der txt mit dem neuen austauschen :o
geht das? if yes then wie? -
ja das geht schon. auch mit ner txt aber da bietet sich doch die ini an. wär das nichts für dich?
-
wenn de mir sagst wie
-
wenn de mir sagst wie
schau dir doch mal die beispiele zu iniread und iniwrite an. damit dus verstehst.
lösen würd ich das ganze dann so in etwa:
[autoit]If $recv <> "" Then
[/autoit]
GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
IniWrite(@Scriptdir & "\recieved.ini", "Recieved", "<HierIPeinfügen>", $recv)
EndIf -
Kay, dann muss ich ja $recv splitten weil da ja net nur die ip drin ist.
[autoit]
das heißt:$IP = _StringBetween($recv , '" IP Adresse:"', '" Computername')
[/autoit]sagter aber $IP wär net deklariert
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <String.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1);==============================================
[/autoit] [autoit][/autoit] [autoit]
;==============================================
; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
;==============================================
;==============================================
dircreate("C:\Message\")global $open
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
[/autoit] [autoit][/autoit] [autoit]
; 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
Local $msg, $recv; Startet den TCP Service
[/autoit] [autoit][/autoit] [autoit]
;==============================================
TCPStartup(); Erstellt einen lauschenden Port.
[/autoit] [autoit][/autoit] [autoit]
; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT); Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $MainSocket = -1 Then Exit; Erstellt eine GUI für Messages.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$GOOEY = GUICreate("Message - Server IP: " & $szIPADDRESS, 550, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
GUISetState(); Initialisiert eine Variable um eine Verbindung anzugeben
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
$ConnectedSocket = -1; Wartet auf und akzeptiert eine Verbindung
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1; Bekommt die IP des verbundenen Clients
[/autoit] [autoit][/autoit] [autoit]
$szIP_Accepted = SocketToIP($ConnectedSocket); GUI Message Schleife
[/autoit] [autoit][/autoit] [autoit]
;==============================================
While 1
$msg = GUIGetMsg(); GUI beendet
[/autoit] [autoit][/autoit] [autoit]
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop; Versucht Daten zu empfangen, bis zu 2048 bytes
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 30000); Aktualisiert das Input-Control mit dem, was wir empfangen haben.
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------
If $recv <> "" Then
GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
$IP = _StringBetween($recv , '" IP Adresse:"', '" Computername')
msgbox(1,"",$IP)EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WendIf $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]TCPShutdown()
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>Example; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
[/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------------------------
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, _
[/autoit] [autoit][/autoit] [autoit]
"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
[/autoit] [autoit][/autoit] [autoit][/autoit]
EndFunc ;==>SocketToIPund client:
Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit]TCPStartup(); wird nur einmal aufgerufen
[/autoit] [autoit][/autoit] [autoit]Global $szIPADDRESS = "192.168.245.128"
[/autoit] [autoit][/autoit] [autoit]
Global $nPORT = 33891
Global $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
AdlibRegister('_client', 5000); rufe die func _client alle 5 sec aufWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _client ()
[/autoit] [autoit][/autoit] [autoit]
$szData = "IP Adresse: " & @IPAddress1 & " Computername: " & @ComputerName & " Zeit des Clienten: " & @HOUR & ":" & @MIN & ":" & @SEC
TCPSend($ConnectedSocket, $szData)
EndFunc ;==>_clientFunc _quit()
[/autoit] [autoit][/autoit] [autoit][/autoit]
TCPShutdown()
EndFunc ;==>_quit -
_Stringbetween gibt ein array zurück:
ZitatErfolg: Ein 0-basierendes $Array[0] enthält den ersten gefundenen String.
-
nach pm absprache entstand das:
[autoit]If $recv <> "" Then
[/autoit]
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)
EndIfund nicht vergessen:
[autoit]Include <String.au3>
[/autoit] -
string.au3 ist drin
sagt $ip ist nicht deklariert
-
achso du verwendest MustDeclareVars
dann tausch z.B. die zeile:
[autoit]Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
[/autoit]
[autoit]
gegen die aus:Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted, $ip, $host, $time
[/autoit] -
Then we get a Error: subscript used with non. Aqrray var. Error
Line: 85
[autoit]IniWrite(@Scriptdir & "\recieved.ini", $ip[0], $host[0], $time)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]IniWrite(@Scriptdir & "\recieved.ini", $ip^ERROR
-