Hm wie sind deine Messgeräte denn verbaut? Also in welche Richtung beweglich und in welche nicht. Ich selbst hab mein FEZCerbot beigebracht auf den Hinterrädern zu "stehen", weil ich dass mal in einem Youtube-Video gesehen hab.
Dabei hab ich die gleiche Formel wie deine erste benutzt. Mein Cerbot selbst kann, wenn er steht, nur in eine Richtung kippen. Daher ist der Acc-Winkel. Auf der Y-Z-Koordinate abzulesen. (X-Achse = der Achse der Hinterräder)
Hier mal ein Codebeispiel, damit du verstehst was gemeint ist:
byte[] buffer = ....; //irgend eine Nachricht
int i = buffer.Length;
byte[] length = BitConverter.GetBytes(i);
stream.Write(length);
stream.Write(buffer);
byte[] length = new byte[4];
stream.Read(length,0,4);
int i = BitConverter.ToInt32(length);
byte[] buffer = new byte[i];
stream.Read(buffer,0,i);
_
Dies ist nur ein Beispiel des obengenannten Protokolls. Es wurde nicht getestet und auch nich in einer Entwicklungsumgebung geschrieben._
Deine Variable neuerText wurde nicht in der while Schleife deklariert,
sondern in Zeile 6. Besser ist es aber, du definierst es gleich:
string neuerText = null;
Das Problem ist aber, dass du neuerText immer überschreibst, das zu korrigieren ist ein bisschen mehr Arbeit glaub ich.
Aber ich habe einen einfachen Vorschlag für dich:
verwende einfach String->Replace, du benötigst ja keine Regex, da deine Zeichenfolge feststeht.
return text.Replace(" ","\r\n");
Wenn du trotzdem Regex benutzten möchtest, dann nutze dafür auch die Replace-Funktion der Regex Klasse. 😉
Ich hab jetzt ein bisschen getestet, um den Algorithmus für das Zeichnen offenzulegen. (Standarteinstellung). Er scheint bei mir immer von unten nach oben zu zeichnen, solltest du also mal keine Symmetrie haben, so muss gelten, dass:
Intervallgröße*n = -min, mit n ist eine Natürliche Zahl und min <0, max>0. Also wenn du
chart1.ChartAreas[0].AxisY.Interval =-min / i;
wählst mit i ist eine Natürliche Zahl.
Nur dann gibt i nicht die Anzahl der Itervalle an, sondern nur die Anzahl der Intervalle zwischen min und 0. Für eine bestimmte Anzahl an Intervalle müsstest du dann i in Abhängigkeit von max wählen.
int intervalCount = ...;
double max =..., min = ...;
double intervalSize = (max-min) / intervalCount;
i = Math.Max((int)Math.Round(-min/intervalSize),1);
chart1.ChartAreas[0].AxisY.Interval =-min / i;
Das haut zwar mit der Anzahl der Intervalle nicht immer genau hin, da i ja eine Natürliche Zahl sein muss, aber es liefert meiner Meinung dennoch ein ausreichendes Ergebnis (nur bei |min|<<|max|, min viel kleiner als max) führt es zu vielen Intervallen.
Ist es notwendig, dass das Diagramm symetisch ist? Wenn du
chart1.ChartAreas[0].AxisY.Maximum = double.NaN;
chart1.ChartAreas[0].AxisY.Minimum = double.NaN;
lässt, sollte er eigentlich die Grenzen so wählen, dass eine 0 Achse zu sehen ist.
Alternativ kannst du auch einfach die
chart1.ChartAreas[0].AxisY.Interval
Eigenschaft überschreiben.
Mit
chart1.ChartAreas[0].AxisY.Interval = (max-min) / i;
sollten (wenn max≥0 und min ≤0, max > min,|max|=|min| und i%2 = 0) eigentlich i+1 Datenlinien zu sehen sein, wobei eine durch den Ursprung geht. Da |max|=|min|, max≥0, min≤0 bei dir durch die symmetrie ja gegeben ist, max > min sowieso gegeben ist, sollte es eigentlich funktionieren. Vergiss nicht i%2=0, da du eine ungrade Anzahl von Linien benötigst und du eine Linie mehr hast als Intervalle.
Du benutzt DGram/Udp versuch spaßeshalber mal die Codezeile
sck.Connect(epRemote);
zu löschen.
Dann musst du die Codezeile
sck.Send(msg);
durch
sck.SendTo(msg,new IPEndPoint(IPAddress.Parse(textIP2.Text), Convert.ToInt32(textPort2.Text)));
ersetzen.
Ich hatte es schon, dass durch ein Verlagerung der Problematischen Codezeile ein anderer Fehler generiert wird. Warum es bei deinem Rechner nicht funktioniert, kann ich dir nicht sagen. Was für ein BS oder Antiviren Programm / Firewall nutzt du?
Wie gesagt das ist möglich:
<Style>
<Style.Triggers>
<Trigger Property="..." Value="...">
<Setter .../>
<Setter .../>
</Trigger>
</Style.Triggers>
</Style>
Quelle: http://openbook.galileocomputing.de/visual_csharp_2010
Wenn ich mich nicht irre, dann ist das möglich.
Danke für die Antworten.
Ich nutze jetzt eine Kombination aus beidem, da ich die Schiffe selbst nicht als Objekt benötige.
Meine Schiffsklasse speichert alle wichtigen Werte, die das Schiff betreffen und die Anzahl der Schiffe.
Ein Schiff erzeuge ich über eine statische Funktionen, der ich ein Enum und die Anzahl der Schiffe übergebe.
Das war auch erst mein Gedanke, nur war ich mir nicht sicher, ob es wegen dem größeren Speicherbedarf ein bessere Lösung gibt,
da ja viele Schiffe einer Art, sonst immer ein neues Objekt wäre, mit gleichen Werten.
Bsp. 10.000 Auroras --> komplett gleiche Werte
Man könnte auch beides verknüpfen: In dem man die Anzahl in der Klasse als Eigenschaft definiert.
Hallo community,
Ich arbeite gerade an einem Programm, dass bei einem Browsergame alle Daten ausliest usw.
Nun gibt es allerdings auch Schiffe mit Atk, Hülle, usw...
Sollte ich nun für jedes Schiff eine eigene Klasse anlegen oder sollte ich lieber in einer Klasse Flotte alle Schiffe als int speichern und die Eigenschaften über Funktionen auslesen (Atk, Hülle, etc.).
Das Gleiche gilt ja auch für Forschung und Gebäude.
Ich tendiere eher zu letzterem.
Verständlich, auch wenn das nicht viel wäre:
(hab bisher auch nicht mit unsicherem Code gearbeitet)
unsafe
{
// d ist double[10,10]
// fixed, andere Möglichkeit, um an p zu kommen, kenn ich nicht...
// irgend etwas mit Marshal glaub ich...
fixed (double* p = d)
{
double* pUnfixed = p;
// statt 10 -> i*array.GetLength(1)
pUnfixed+= 10;
double[] test = new double[10];
// in ein entsperechendes Array kopieren
Marshal.Copy(new IntPtr(pUnfixed), test,0, 10);
}
}
}
Naja über unsicheren Code ⚠ kann man die Elemente auf jedenfall herauskopieren in ein double[64] Array, bzw. den entsprechenden Pointer übergeben.
Kann den deine AddData-Methode überhaupt ein Array entgegen nehmen?
Ich vermute mal, dass das ein Problem mit 64bit-Systemen ist:
Ich denke, dass der Registrypfad
HKEY_LOCAL_MACHINE\SOFTWARE*Wow6432Node*\Microsoft\Windows NT\CurrentVersion
ist und nicht
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Du versuchts zwar den zweiten zu öffnen, doch das Betriebsystem ändern den Pfad zum ersten, da du keine 64bit Programm startest.
Was du aber gegen diese Änderung tun kannst, weiß ich nicht?
Wo genau liegt jetzt dein Problem?
Ich weiß nicht wie man es am besten macht, aber du könntest doch am Anfang der Daten den Verwendungszweck mit schicken also:
Versuch mal Combobox.Items[ComboBox.SelectedIndex] oder Combobox.SelectedItem
Typische Fall von [FAQ] Warum blockiert mein GUI
Ich empfehle das WebBrowser.DocumentCompleted Ereignis zu verwenden.
Ich glaube der fachbegriff heißt Kubische Splines
Kann der Pfad auch relative sein?
Ausonsten solltest du Prüfen ob die TextBox leer ist, ob ungültige Zeichen in der Pfadangabe vorhanden sind und ob 2 \ im späteren Pfad hintereinander sind.
Welcher Grad soll die erhaltene Funktion haben?
Abhängig von der Länge des Arrays?
Spontan fällt mir da nur ein, das Projekt als Consolenanwedung zu starten.
Dann hat man aber immer dieses hässliche schwarze fenster.
Nein ich habe es mal als WindowsForms Anwendung gestart und da funktioniert es mit xcopy nicht.
Als Test habe ich xcopy durch cmd ersetzt und siehe da es funktioniert.
Bei mir funktioniert es (stdOut enthält die Daten). Allerdings starte ich als Consolenanwendung
Process process = new Process();
process.StartInfo.FileName = "xcopy.exe";
process.StartInfo.Arguments = "/?";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string stdOut = process.StandardOutput.ReadToEnd();
//Ausgabe von process einlesen mit StreamReader
process.Close();
Das crypter.FlushFinalBlock() muss gleich hinter dem letzten Schreibvorgang. Dann funktioniert das auch.
Schon mal was von Flush gehört. Du schreibst zwar die Daten in den MemorySteam rufst aber nicht crypter.FlushFinalBlock() auf.
Wie sieht denn user.BeginConnect aus?
Befinden sich beide PC's im Intranet?
Wie wäre es wenn du einenen DateiStream erstellst und die Bitmap über diesen öffnest:
FileStream fs = new FileStream("C:\\Bild.bmp",FileMode.Open);
Bitmap bmp = new Bitmap(fs);
fs.Close();
über Hole punching z.B.
Ein Vermittlungsserver schickt die IPEndPunkte an beide Clients, die schicken Daten an den jeweiligen. Alle von dort kommenden Daten werden dann als Antwort interpretiert --> sie werden nicht geblockt (Bsp.: Skype)
Es könnte an deinem Router liegen.
In der Regel blockieren die Router von außenkommende Packete, wenn keine Portweitergabe definiert wurden ist, und du selber nicht das erste Packet geschickt hast.
Wenn sich also einer der beiden Clients (der Server) hinter einer Firewall (seiner eigenen oder die des Routers) versteckt, dann werden alle ankommenden Packete blockiert. Durchgelassen werden sie erst, wenn du die Funktion deaktivierst, oder wenn du der Server ein Packet an deinen CLient sendet, da dann die ankommenden Packete als Antwirt interpretiert werden.
(siehe auch UDP Hole punching)
Woher soll jetzt dein Client auch wissen, wie viel er lesen soll?
Und für ReadLine musst du auch ein Zeilenende schreiben.
Hibt es nicht auch eine Eigenschaft isReadOnly?
Die Close Methode verwirft doch das Objekt, wenn ich mich nicht ganz irre, daher kann es sein, dass nach der Close-Methode diese object keine Verbindung mehr aufbauen kann (cath-Fehlermeldung abfange)
Disconnect statt Close, wenn es sowas gibt, könnte helfen, oder du erstelltst ein neues Object.
Ansonsten ist die frage: Wieso öffnset du eine Verbindung un schließt sie dann wieder?
Eigentlich ist UDP verbindungslos, deshalb funktioniert es vielleicht nicht richtig.
Wie die Links werden nicht schnell genug geladen?
Schauh dir mal html an. Solche eingaben werden immer über ein Formular geregelt (<form ...>...</form> und auf der Seite gibt es nur ein <form...> Tag
Schonmal daran gedacht, dass http://adfoc.us nicht die Seite ist um diech einzuloggen?
Hab mal den Quelltext schnell überflogen und glaube, dass die seite http://adfuc.us/?login=1
Toll das du es allein hinbekommen hast. Aber bitte poste das nächste mal die Lösung in einer extra Frage, damit nicht immer Ohne Antwort: davor steht.
Hier die erste Seite die ich bei google gefunden habe:
What is the structure of the RAR header?
Wenn du damit meinst, dass du den Thread nur für PING PONG nutzen willst, dann nein, da du auch Antworten ließt, die KEIN PING sind.
Alle Abfragen werden ansonsten in einen Extrea Thread gepackt, da sonst die GUI blockiert. Eine verarbeitung passiert dann durch events (siehe auch asynchrone Vorgänge)
Ja (das ist auch in meinem link nachzulesen)
Ich hab dein Programm mal getestet und bekomme keinen time out sondern eine Verbindung.
[EDIT]
Er hat ja gleich die erste Zeile ausgegeben und erhält schon einen time out. Selbst wenn, dann müsste er erst ein Ping bekommen
Und was ist jetzt genau dein Problem?
Was bekommst du den als Antwort vom Server?
Ist der Server passwort geschützt?
Hier eine gute Seite zu IRC
Da würde ich dir eher WPF empfehlen. Ich glaube das geht so garnicht mit den normalen Mitteln.
Es gibt bestimmt eine Eigenschaft SelectedIndex. Diese musst du dann auf -1 setzen.
"\." oder @"."
. entspricht jedes belibige Zeichen
Stoppt der Debugger wirklich dort oder nicht eher bei AcceptTcpClient?
Testes du dein Programm zufällig auf nur einem Rechner?
Dann gebe ich dir den Tipp Binde den Client nicht an einen EndPoint und schon garnicht an dem des Servers, wenn ich das Richtig sehe
IPEndPoint endpoint = new IPEndPoint(targetAdress, 5500);
client = new TcpClient(endpoint);
client.Connect(targetAdress, 5500);
this.tcpListener = new TcpListener(IPAddress.Any, 5500);
Den Port kann man über Windows-Firewall>Erweiterte Einstellungen>Eingehende Regel>Neue Regel freigeben, wenn mich nicht alles täuscht.