[autoit]
GUICtrlSetOnEvent(-1, ItemClick($array[$c][0]))
[/autoit]Wenn ich das richtig weiß, darfst du bei GUICtrlSetOnEvent keine Parameter übergeben.
GUICtrlSetOnEvent(-1, ItemClick($array[$c][0]))
[/autoit]Wenn ich das richtig weiß, darfst du bei GUICtrlSetOnEvent keine Parameter übergeben.
Nachdem der Client sich in den Server eingeklinkt hat
läuft das auch ganz normal mit TCPSend...
Und achte mal bitte etwas auf Satzzeichen, Grammatik etc.,
je einfacher man deine Posts lesen kann, desto eher ist man auch bereit sich
damit auseinanderzusetzen...
TCP-Fragen gab es gerade in der letzten Woche massenhaft,
es existieren also ganz frische Einträge im Forum,
also einfach mal suchen...
Und eigentlich sind die TCP-Befehle in der Hilfe sehr ausführlich dokumentiert,
inkl. lauffähigem Script, wüsste da ohne eine konkrete Frage deinerseits nichts
zu erklären...
Ach ja ?
Zitat[autoit]For $i = 1 to 528
[/autoit]
Willst du für jeden Button eine eigene Funktion erstellen ?
Die Buttons in einer Array zu speichern macht durchaus Sinn.
Da kannst du aber besser im OnEventMode arbeiten, und jedem
Button einfach dieselbe Funktion zuweisen.
In der Funktion kann man dann mit @Ctrl_Id oder so abfragen, welcher
der Buttons geklickt wurde
Oder aber im Loop-Mode:
Case $Button[$i] - funktioniert so einfach nicht.
Du musst dann schon in einer Schleife prüfen, ob die ControlID mit der
eines Buttons übereinstimmt.
Alina:
Lesen ?
Er sagte doch extra, dass ProcessExists nicht seinen Anforderungen entspricht,
da so allein nicht sicher ist, von wo die Exe ausgeführt wurde....
Startest du die Exe aus einem Script ?
Dann kannst du dir ja die PID ausgeben und
auf eben die mit ProcessExists prüfen lassen.
Und wenn dem nicht der Fall ist suchst du also nach einer Möglichkeit, von einem Prozess den
Pfad zu ermitteln, oder wie muss ich das verstehen ?
Edit: [ gelöst ] Prozess zu Pfad
Ich hab noch eine Anmerkung:
Soweit ich weiß wird die Endbedingung der For-Schleife, also
hier das Ubound, nur einmal überprüft.
Hatte das Problem letztens mit meinem Rat.:
Wenn hier ein Client offline geht und du das entsprechende
Array-Item löschst, hat das Array weniger Elemente !
Bsp: 100 Clienten sind anfangs drin.
Nummer 42 und 67 fliegen raus:
Nur noch 98 Elemente - das Script läuft aber weiter bis 100 !
==> Subscript used with .. blabla-Error
Schreib das in eine Do-Until -Schleife um und die Sache ist geritzt
Was für ein Error ?
Gibt AutoIt einen kritischen, oder werden die Clienten einfach
alle gelöscht ?
$Recv=TCPRecv($Acc[$i],999999)
[/autoit]Ob 999999 in der Funktion aktzeptiert wird ?
Mal mit kleineren Werten, wie 2048, versucht ?
Im Router halt.
Virtual Server, oder Special Applications, oder vielleicht heißt es bei dir "Port-Forwarding" ?
Klar hat das Auswirkungen:
Alle Anfragen, Verbindungsversuche, die von außen über den einen Port kommen werden auf
den Server-PC weitergeleitet.
Kann u.U. Probleme mit anderen Programmen geben,
zum Thema Sicherheitslücke kann ich nichts zu sagen, hab ich nicht viel Ahnung von.
Edit:
@nof@ker : Hast du meinen Einwand inzwischen verstanden ?
Es geht doch gerade darum, wie das im Internet läuft ?
Der Client muss die WAN-Ip des Servers angeben.
-- Zu langsam. Portweiterleitung hatte ich im übrigen schon erwähnt
ich weiß ich nicht aber bei mir stimmt das ... und es geht auch
Das kann so nicht gehen.
Du prüfst, ob der Wert von $Acc[$i] gleich ist mit dem aktuellen Wert des @error-Makros !
Zuvor hast du aber $Acc[$i] als die Socket-Nummer des neuen Clienten definiert, und
$Acc[$i] wird auch an keiner anderen Stelle ein neuer Wert zugewiesen !
Was du tun musst ist, wie zuvor beschrieben, prüfen, ob beim Empfangen von Daten mit
TCPRecv ein Fehler auftritt !! :pinch:
Edit: Über "weitreichende Gebiete":
Server IP in TCPListen muss Lokale IP sein.
Im Router des Netzwerkes des Servers muss der genutzte Port auf die Lokale IP weitergeleitet werden.
Der Client muss die Globale IP des Server im TCPConnect angeben.
Wie auch in X Threads zuvor erklärt...
For $i=0 to Ubound($Acc,1)-1
If $Acc[$i] = @error Then
_ArrayDelete($Acc,$i)
EndIf
Next
Fehler !
Warum sollte $Acc[$i] aufeinmal = @error sein ?
Die Aussonderung der verlorenen Clienten muss nach dem
TCPRecv geschehen:
$Recv = TCPRecv( $Acc[$i], 2048 )
If @error Then
_ArrayDelete( $Acc, $i )
ContinueLoop
EndIf
Versuch das doch einfach Schritt für Schritt
selber umzusetzen, ich versteh nicht, warum immer
alle für alles ein Beispiel haben wollen...
Ich bin der Ansicht, dass meine Beschreibung detailliert genug war.
Ansonsten gibt es hier noch andere Threads mit fertigen Chats oder Ansätzen dazu...
Für mehrere Verbindungen, also beim Server, kannst du
einfach im Main-Loop weitere Verbindungen annehmen und die
Sockets in einer Array speichern.
Was du sowieso machen musst, ist, ebenfalls im Main-Loop, alle Sockets, alle
angenommenen Verbindungen, auf eingehende Nachrichten zu überprüfen, bzw.
Nachrichten in Empfang zu nehmen:
Mit TCPRecv.
Wird vom Clienten nichts gesendet wird der Versuch nach X Millisec abgebrochen,
kannst du mit Opt( .. ) einstellen. Wenn der Client die Verbindung getrennt hat wird
dazu noch ein @error auftreten, den kannst du abfragen und den entsprechenden
Eintrag aus deiner Array löschen. =)
Dann habe ich dich richtig verstanden.
Antwort: siehe oben
Mensch was seid ihr alle süchtig oO
Lasst ihn doch erstmal selber ausprobieren, wenn da schon fertiger Code steht
ist die Versuchung immer sehr groß, den zu übernehmen ohne ihn ganz zu verstehen
Scheint ja so.
Aber warum muss das IniReadSection unbedingt in die Funktion ?
Wenn du die nur einmal einlesen willst musst du das entweder außerhalb
der Funktion machen - dann als Global oder eben der Funktion die Array übergeben,
oder die Variable Global vorher zB auf -1 setzen und in der Funktion eben abfragen,
If $array = -1, oder logischer: If Not IsArray( $array ) Then $array = IniReadSection ...
Ansonsten wüsste ich nicht, was du meinen könntest