Was genau ist denn schlussendlich die Aufgabe des 'Testtools', das du zu schreiben versuchst?
Beiträge von BinDannMalWeg
-
-
Also entweder habe ich es überlesen, oder es hat wirklich noch keiner vorgeschlagen FileWrite() zu nutzen...
Hier mal ein kleines Beispiel:Spoiler anzeigen
[autoit]Run('C:\installer.exe -silent', @ProgramFilesDir, @SW_HIDE)
[/autoit]
If @error Then _Log('Beim Ausführen von "C:\installer.exe -silent" ist ein unerwarteter Fehler aufgetreten!')
; ...
Func _Log($Text)
FileWrite(@ScriptDir & '\Log.txt', $Text & @CRLF)
EndFunc ;==>_Log -
Okay dann lösche ich mein Retro-Snake eben wieder...
War nicht eigentlich morgen Abend Abgabe?
-
Wie wäre es wenn du als Trennzeichen in den Paketen einfach andere Zeichen benutzt und die Pakete dann später einfach mit StringReplace() und StringSplit() zurecht schneidest?
-
Wenn du willst kannst du dir ja auch mal meinen Map Editor (von meinem 2D RPG) ansehen... Er hat es zwar nie über Version 1.0 geschafft, aber das eigentliche Script ist trotzdem drei mal größer als das eigentliche Spiel.
Im Anhang des Startposts findest du dem Editor... ;)
http://www.imagebanana.com/view/6rzwy9z0/md.gif -
Also ich benutze auch die neuste Version von Chrome und habe leider auch dieses Problem mit dem falschen Scrolling...
-
Wenn du chesstigers Script durch den Compiler jagst und den Entpackungs-parameter von FileInstall ins Temp-Verzeichnis legst, dann funktioniert das auch 'ohne' die Exe-Datei...
Oder willst du die Binär-Daten der Exedatei in einer Variable einbinden und diese dann direkt aus dem Speicher ausführen?
-
Warum machst du es denn nicht einfach so:
Spoiler anzeigen
[autoit]#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]Func _DeleteOldFiles($Path, $Time)
[/autoit]
If StringRight($Path, 1) <> '\' Then $Path &= '\'
$Search = FileFindFirstFile($Path)
While 1
$File = FileFindNextFile($Search)
If @error Then
ExitLoop
ElseIf @extended Then
_DeleteOldFiles($Path & $File & '\', $Time)
Else
$FileTime = FileGetTime($Path & $File, Default, 0)
If IsArray($FileTime) Then Dim $StartTime = $FileTime[0] & '/' & $FileTime[1] & '/' & $FileTime[2] & ' ' & $FileTime[3] & ':' & $FileTime[4] & ':' & $FileTime[5]
If _DateDiff('D', $StartTime, @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC) > $Time Then FileDelete($Path & $File)
EndIf
WEnd
EndFunc ;==>_DeleteOldFilesAchtung: Ungetestet!
-
is es nicht eigentlich einfacher? da man nicht mit 2 ports & Verbindungen arbeiten muss
für z.B ein einfachen Chat zwischen 2 pc´s
name22: Ich denke ProGamer ist einfach nicht klar, wie man TCP in Autoit richtig verwendet... -
Zu 'Problem' Nummer 2: Liege ich richtig mit der Annahme, dass du versuchst den MsgBox-Generator aus Scite nachzubauen?
-
So etwas löst mann doch nicht über Sleep!
In meinem Beispiel habe ich das nur der Verständlichkeit halber so gelöst... Normalerweise macht man das so, dass der Client/Server die Pakete 'unvorbereitet' empfängt. Das heißt, dass er nicht nur dann auf ein Paket wartet, wenn er gerade eines angefordert hat, sondern immer wenn er verbunden ist. So ist es kein Problem wenn die Gegenseite mal etwas schneller oder langsamer ist. Außerdem lassen sich dann auch problemlos viele Pakete/Befehle hinter einander losschicken und und und...
-
Naja wirkliche Alternativen fallen zumindest mir da keine ein, es sei denn du machst es über UDP... :wacko:
Versuch es doch einfach mal mit TCP und wenn du nicht weiter kommst, kannst du hier ja nachfragen...
Alternativ würde ich mich (aus Langeweile) anbieten dir den Server zu schreiben, wenn du mir sagen kannst, was genau er denn können soll... -
Freut mich, dass ich dir zumindest teilweise helfen konnte...
Naja ich hatte schon befürchtet, dass du das fragst, aber bevor ich dir jetzt auch noch ein Beispiel für einen Multi-TCP-Server schreibe, kann ich ja einfach mal versuchen es dir so zu erklären, denn im Grunde ist es das selbe Prinzip wie bei nur einem Client. Allerdings musst du die Clients/ihre Sockets in einem Array abspeichern und sie dann eben wieder aus diesem löschen, wenn die Verbindung geschlossen wird/wurde. Außerdem musst dann natürlich auch in einer For-Schleife alle Client-Sockets auf neue Pakete überprüfen usw. Des Weitern musst du dir darüber im Klaren sein, dass du immer wenn du einem Client auch eine Antwort geben willst, dir merken musst welcher Client denn die Anfrage gestellt hat...Das war jetzt mal da gröbste was du wissen musst. Außerdem kannst du dir ja einfach mal die Server-Scripte der zahlreichen TCP-Chats ansehen, welche natürlich auch fast alle eine Art "Multi-Server" enthalten...
-
Soo ich habe mich mal schnell an ein Beispiel gesetzt, was dir die verschiedenen Funktionen hoffentlich genauer erklären dürfte...
Es besteht aus einem Server- und einem Client-Script:Spoiler anzeigen
Server
[autoit]Global $MainSocket, $ClientSocket
[/autoit]
TCPStartup()
Do
$MainSocket = TCPListen(@IPAddress1, 4321) ; Wir versuchen auf dem Port 4321 einen TCP-Server zu erstellen
Until Not @error
ConsoleWrite('Server hört jetzt auf dem Port 4321' & @CRLF)
While 1
$ClientSocket = TCPAccept($MainSocket) ; Wir warten auf einen Verbindungsversuch eines Clients...
If $ClientSocket <> -1 Then
; Ein Client ist nun mit unserem Server verbunden. Wir können mit ihm über das Socket $ClientSocket kommunizieren...
While 1
$Recv = TCPRecv($ClientSocket, 1024) ; Wir schauen nach, ob der Client uns über das Socket ein Paket gesendet hat...
If @error Then ExitLoop ; Falls der Client die verbindung 'plötzlich' getrennt hat, gehen wir wieder in den 'Warten-Mode'
If $Recv <> '' Then
$Command = StringLower(StringLeft($Recv, StringInStr($Recv, '|') - 1))
$Content = StringTrimLeft($Recv, StringInStr($Recv, '|'))
ConsoleWrite('Paket empfangen: "' & $Recv & '"' & @CRLF & @TAB & 'Befehl: ' & $Command & @CRLF & @TAB & 'Parameter: ' & $Content & @CRLF)
Switch $Command
Case 'messageBox'
MsgBox(64, 'Nachricht von Client:', $Content, 4)
Case 'randomNumber'
Sleep(250)
TCPSend($ClientSocket, 'Z' & Random(1, 100, 1)) ; Hier wird ein Paket an den Client zurück gesendet!
Case 'disconnect'
ExitLoop
Case 'shutdown_server'
ConsoleWrite('Der Server wird nun beendet...' & @CRLF)
TCPCloseSocket($ClientSocket)
TCPShutdown()
Exit
Case Else
ConsoleWrite('Unbekannter Befehl: "' & $Command & '"' & @CRLF)
EndSwitch
EndIf
WEnd
; Verbindung wird geschlossen und wir beginnen damit wieder auf eine neue Verbindung zu warten...
TCPCloseSocket($ClientSocket)
EndIf
WEndSpoiler anzeigen
Client
[autoit]TCPStartup()
[/autoit]
; Eingaben durch User:
$Server_IP = InputBox('Server IP', 'Bitte geben sie die IP des Servers an:', @IPAddress1)
$Server_Port = InputBox('Server Port', 'Bitte geben sie den verwendeten Port des Servers an:', 4321)
; Wir versuche uns mit dem Server zu verbinden:
$MainSocket = TCPConnect($Server_IP, $Server_Port)
If @error Then
MsgBox(16, 'Fehler beim Verbinden', 'Entweder stimmen IP-Adresse/Port nicht, oder es ist bereits ein anderer Client mit dem Server verbunden...', 10)
TCPShutdown()
Exit
EndIf
MsgBox(64, 'Verbindung aufgebaut!', 'Es wurde erfolgreich eine Verbindung mit dem Server hergestellt...', 10)
Sleep(1000)
; Wir lassen eine MessageBox, auf dem Server anzeigen...
TCPSend($MainSocket, 'MessageBox|Hallo Server!')
Sleep(4500)
; Nun senden wir ein Paket mit einem falschen Befehl an den Server...
TCPSend($MainSocket, 'Gameserver-Start|Parameter1,Parameter2,Workingdir')
Sleep(500)
; Wir fordern mit dem Befehl 'RandomNumber' eine Zufallszahl vom Server an...
TCPSend($MainSocket, 'RandomNumber|Parameter der nicht beachtet wird...')
Do
$Recv = TCPRecv($MainSocket, 1024)
Until $Recv <> '' ; Wir empfangen die Rückgabe des Servers auf unsere 'RandomNumber'-Anfrage...
MsgBox(0, 'Rückgabe vom Server:', 'Vom Server generierte Zufallszahl: ' & $Recv, 10)
; Zu letzt trennen wir die Verbindung zum Server wieder 'sauber' (über unsere eingebaute Funktion...)
TCPSend($MainSocket, 'Disconnect|')
; Wir warten kurz...
Sleep(1500)
TCPCloseSocket($MainSocket)
Sleep(500)
; Okay nun werden wir uns noch einmal mit dem Server verbinden, um ihn auszuschalten:
$MainSocket = TCPConnect($Server_IP, $Server_Port)
If Not @error Then
TCPSend($MainSocket, 'Shutdown_Server|')
TCPCloseSocket($MainSocket)
EndIf
TCPShutdown()
ExitBitte denk daran, den Server immer VOR dem Client zu starten und die Inhalte der Inputboxen, so zu belassen, wie sie sind...
-
Naja ich habe ein Aspire aus der gleichen Baureihe (ich glaube sogar mit dem selben Gehäuse) vor cira einem halben Jahr bei Media Markt für 555,-€ gekauft. Allerdings hat meines satte 8GB Arbeitsspeicher... Ansonsten sind die Komponenten, wenn ich mich nicht verguckt habe, fast exakt gleich...
Edit: Ich suche mal schnell das Datenblatt von meinem Laptop raus... -
So lange es sich bei den 'Paketen' um TCP-Pakete handelt bist du doch im Besitz des Sockets über das du Pakete an den Client senden kannst?
-
Warum möchtest du denn alles in einer Zeile?
[autoit]$Text = "text|text1|text2|text3|"
[/autoit]
$Text &= "text|text1|text2|text3|"
$Text &= "text|text1|text2|text3|"
$Text &= "text|text1|text2|text3"
GuiCtrlSetData($Combo1, $Text) -
[autoit]
$input = 0
[/autoit]
$output = ConsoleWrite(Execute($input) & @CRLF)
You Know?
Warum sollte man sich Mühe machen, wenn Execute ja erlaubt ist... -
Und wo liegt nun dein Problem?
-
Nein ich habe es gerade wieder gefunden... Ich meine den 'Process Monitor'