Laden...

Forenbeiträge von Crone Ingesamt 168 Beiträge

14.08.2015 - 13:18 Uhr

Danke für die Antworten.

Ich hab es nun so gemacht wie es eigentlich sein sollte, Ich nutze object und Konvertieren nun immer entsprechend selbst, damit bin ich Typ sicher muss aber immer in den Funktionen Konvertieren.

die Interpretation von Latino ist Korrekt genau das wollte ich erreichen 😃.

Type.MakeGenericType und Activator.Createinstance hab ich mir auch angeschaut und ist tatsächlich eine Möglichkeit, jedoch gefällt mir die noch weniger als alles manuell zu Konvertieren 😄

Danke für eure Vorschläge

Gruß
Crone

14.08.2015 - 10:35 Uhr

Ich erzeuge einen SplashScreen immer folgendermaßen:

  1. MainForm Konstruktor ausführen
  2. Im Konstruktor als erstes this.Hide ausführen
  3. Im Konstruktor als zweites SplashScreen erzeugen und mit Show und BringToFront anzeigen
  4. Im Konstruktor einen neuen Thread erzeugen in dem dein Ladevorgang stattfindet.
  5. Wenn Ladevorgang beendet SplashScreen.Hide und this.Show ausführen.

Damit solltest du einen Funktionierenden SplashScreen bekommen.

14.08.2015 - 10:26 Uhr

Hallo zusammen,

ich habe eine Klasse die wie folgt aussieht:

    public class NetworkArgs<T> : EventArgs
    {
        public T Message;

        public NetworkArgs(T Message)
        {
            this.Message = Message;
        }
    }

Nun hätte ich gerne eine Liste in dieser sollen verschiedene (T's) Typen gespeichert werden

Anschließend möchte ich eine neue Instanz von NetworkArgs erzeugen mit einen Typen aus der vorher erstellten List.

Ist das möglich, wenn ja wie?

ich habe es bereits mit einige Datentypen versucht, jedoch ohne erfolgt.
Auch habe ich versucht die Datentypen einfach als object zu speichern und später mit typeof zu ermitteln, jedoch ohne erfolg.

14.08.2015 - 10:02 Uhr

Ich hab mich mit 2D ohne Camera leider zu wenig beschäftigt, aber ohne Camera muss du eigentlich folgendes tun:

  1. Maus Position bestimmen
  2. Alle Bilder so verschieben das die Maus Position das Zentrum ist und die Sprites vergrößern.

So würde ich es zu mindestens ohne Camera versuchen zu Lösen, aber ob das der Richtige weg ist kann ich dir leider nicht sagen.

zu den Parametern die View und Projection Matrix sind Werte die eine Camera benötigt.
Wenn du also eine Camera einsetzen solltest benötigt diese eine View und Projection Matrix, diese wiederum werden in der oben gezeigten Funktion benötigt.

Zu der Camera in XNA wirst du aber ein Haufen Tutorials finden die ausführlich und meist sehr anschaulich dir alles erklären.

14.08.2015 - 09:13 Uhr

Handelt es sich um 2D oder 3D?

für 3D kannst du folgendermaßen die Position bestimmen

private Vector3 GetWorldMousePosition(MouseState ms, Matrix projection, Matrix view)
{
    Vector3 near = new Vector3(ms.X, ms.Y, 0);
    Vector3 far = new Vector3(ms.X, ms.Y, 1);
    Vector3 nearPosition = device.Viewport.Unproject(near, projection, view, Matrix.Identity);
    Vector3 farPosition = device.Viewport.Unproject(far, projection, view, Matrix.Identity);

    Vector3 direction = farPosition - nearPosition;
    Vector3 Position = nearPosition + direction * (-nearPosition.Y / direction.Y);

    return Position;
}

Anschließen muss du nur noch die Camera Position anpassen. Hier kann man auch mit dem Z wert einen Zoom erzeugen.

das ganze lässt sich aber auch auf 2D anwenden solang du eine Camera verwendest.

Auch wenn die Camera in 2D nicht zwangsläufig verwendet werden muss, lassen sich damit jedoch solchen ding sehr simple lösen.

13.08.2015 - 16:56 Uhr

Kurze Anmerkung

            while (!_splashForm.Loaded)
            {
                Thread.Sleep(10);
            }

Thread.Sleep ist meiner Meinung nach ein Workaround für Problem die man nicht sauber lösen kann. Verwende einen Custom EventHandler oder ein Delegate, diesen/dieses rufst du auf wenn der Ladevorgang abgeschlossen ist, dadruch sollte die schleife unnötig sein.

28.07.2015 - 08:31 Uhr

Nimm einfach ein Timer den du in KeyDown event startest.

27.07.2015 - 08:48 Uhr

Die try...except- Behandung habe ich herausgenommen, denn sie kaschiert den Grund für den Fehlschlag komplett (Disk voll, Dateiname ungültig, Daten korrupt).

Diese würde ich nicht entfernen, da sonst bei jeder Exception das Programm crashed. Grade bei TCP/SQL etc. sollte man immer zu Sicherheit try catch verwenden,da man nie alle Fehler selbst abfangen kann bzw. es enormer Aufwand währe. Jedoch wurde das try catch natürlich falsch implementiert

Hier ein etwas bessere Fehlerbehandlung

try
{
}
catch(Exception error)
{
//error.StackTrace -> in Error-Log speichern
//error.Message -> in Error-Log speichern
//ggf. Datum / Uhrzeit in Error-Log speichern
//MessageBox mit nachricht an den User das etwas nicht funktioniert hat ggf. error.Message anzeigen
//bei Exceptions wie timeout ggf. auto-retry einbauen
}

Natürlich kann man die Fehlerbehandlung auch außerhalb der Klasse gestallten, es sollte aber jedenfalls darauf geachtet werden das die Exceptions irgendwo, ob nun in der Klasse oder außerhalb, abgefangen werden.

01.07.2015 - 08:41 Uhr

Den interessiert der Connectionstring gar nicht.

Data Source=DATENBANK;Initial Catalog=TABELLE;Persist Security Info=True;User ID=reader;Password=**********  

Was mir auffällt ist das Data Source eigentlich der Server ist und Initial Catalog die Datenbank.
Die Tabelle wird in einem ConnectionString nicht angegeben.

Es gibt ein SQLConnectionStringBuilder versuchs mal damit 😃

13.05.2015 - 16:33 Uhr

Genau das dachte ich mir auch als ich fertig war mit schreiben.
Ein paar locks später und alles funktioniert 😄

Ich denk bei Dictionaries nie daran das diese nicht Thread-safe sind 😦

Danke.

13.05.2015 - 16:13 Uhr

Hallo zusammen,

ich hab ein Tool welches mehrere unbekannte DLLs laden kann, die aber mit meinem Interface übereinstimmen müssen.

In einen Eigenen Thread werden die DLL's geladen und mehrere Funktionen werden aufgerufen.
Nun kommt es aber ab und zu vor (Ja nicht immer, bei ca. 1 von 5 Programm-Starts), dass wenn ich die Rückgabewerte in einen Dictionary einfüge eine NullReferenceException auftritt.

Was wirklich interessant ist das:

  1. Die NullReferenceException nur ab und zu kommt -> Der Programmablauf ist aber vollkommen identisch und ein User kann noch nicht eingreifen, da der Code mit dem Form_Load Event ausgeführt wird.
  2. Wenn ich die Variablen mir anschaue ist keine der Variablen NULL.
  3. Ich füge vier Rückgabewerte in vier verschiedene Dictionaries ein und der Fehler scheint bei einen beliebigen Dictionary aufzutreten... mal ist es das erste, dann wieder das dritte.

                if (plugin != null)
                {

                    if (!plugins.ContainsKey(FileName))
                        plugins.Add(FileName, plugin); //Fehler hier 

                    if (!pluginInfos.ContainsKey(FileName))
                        pluginInfos.Add(FileName, plugin.GetPluginInfo()); //Fehler hier 


                    if (!pluginButtonTexts.ContainsKey(FileName))
                        pluginButtonTexts.Add(FileName, plugin.GetButtonText()); //Fehler hier 

                    Control c = plugin.GetControl();
                    if (!pluginControls.ContainsKey(FileName))
                        pluginControls.Add(FileName, c); //Fehler oder hier 
}

Mir ist vollkommen schleierhaft wie ich eine Exception bekommen kann wenn keiner der Werte NULL ist.

ich hoffe jemand von euch hat eine Idee woran es liegen könnte, den ich könnte nach ewigen Debuggen nichts entdecken.

Gruß Crone

26.05.2014 - 09:17 Uhr

So ich hab den Fehler endlich gefunden.

Der FTP Path ("ftp://192.168.100.2:21/subdir/test.txt") enthielt als Verzeichniss "subdir" dieses war aber schon das Standardverzeichnis des verwendeten Benutzers.

Das subdir musste also einfach aus den FTP-Path gelöscht werden.

Warum dies mit den Explorer und anderen FTP-Programmen problemlos funktioniert ist mir zwar noch ein Rätsel, da der Fehler vom FTP-Server zurück gegeben wurde.

Gruß
Crone

23.05.2014 - 16:58 Uhr

Hallo zusammen,

ich habe drei Dateien die ich mit einen kleinen FTP Programm hochladen bei zweien funktioniert es super nur bei der dritten nicht.

leider konnte ich nach stunden langen debuggen und google noch immer keine Lösung finden.

Jedes mal wenn ich versuche die Datei zu Uploaden bekommen ich folgenden Fehler:

Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff

Ich hab via FileZilla den Username und das Passwort ausprobiert und auch versucht einen Datei Manuell hoch und runterzuladen. Alles lief ohne Probleme.

Versuche ich eine Datei mit mein Programm herunterzuladen klappt das nicht.

destPath enthält: "ftp://192.168.100.2:21/subdir/test.txt"

                Uri uri = new Uri(destPath);
                FtpWebRequest fwr = (FtpWebRequest)FtpWebRequest.Create(uri);
                fwr.Method = WebRequestMethods.Ftp.UploadFile;
                fwr.Credentials = new NetworkCredential(con.Username, con.Password);
                fwr.UseBinary = true;
                fwr.UsePassive = false;

                FileStream fs = new FileStream(con.LocalPath + @"\" + (realFileName.Length > 0 ? realFileName : con.SourceFileName), FileMode.Open);
                byte[] fileContents = new byte[fs.Length];
                fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
                fs.Flush();
                fs.Close();

                Stream requestStream = fwr.GetRequestStream();
                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();


                response = fwr.GetResponse();
                status = ((FtpWebResponse)response).StatusDescription;
                response.Close();
                return status;

Danke für eure Hilfe.

Gruß Crone

13.05.2014 - 09:16 Uhr

na wer hat sich den sowas ausgedacht 😃

Vielen Danke, funktioniert nun wie gewünscht.

12.05.2014 - 16:59 Uhr

Hallo zusammen,

ich bin auf ein komisches Problem gestoßen welches vermutlich ein bug im debugger oder Framework ... oder ich bin vollkommen blind 😃

Ich möchte mehrere DLL's aus einem Verzeichnis laden (alle unterschiedlich aber von der selben Basis Klasse UND Interface abgeleitet)

Wenn ich nun folgenden Code ausführe wird bei LoadFrom(Pfad) die falsche DLL geladen trotz eindeutiger Pfad-Angabe.

        private void LoadDll(string dllpath)
        {
            try
            {
                Assembly assembly = Assembly.LoadFrom(dllpath);
                Type[] types = assembly.GetTypes(); //hier kommt immer das selbe raus
                foreach (Type type in types)
	            {
                            //IBase baseInterface = assembly.CreateInstance(type.FullName) as IBase;
                            object data = assembly.CreateInstance(type.FullName);
                            IBase baseInterface = data as IBase;//gibt null zurück warum auch immer...
}

ich hab im Ordner z.b

InfoCollector.dll
a.dll
b.dll

für jede Datei ruf ich die Funktion LoadDll auf mit den entsprechenden Pfad als parameter

in der Variable assembly wird auch die richtige assembly geladen,** solang es keine DLL ist die von dem Interface und der Basis Klasse Ableitet... ist es jedoch eine so wird immer die zuerst geladene DLL in dem Fall InfoCollector.dll geladen**

Ich hab leider absolut keine Ahnung mehr woran das liegen könnte bzw. wie ich das Problem beseitige.

Desweiteren kann ich das geladene object wenn ich eine Instanz der Assembly erstelle nicht ins Interface Konvertieren. (es wird null zurückgegeben)

In meinem Test Projekt wo sich alle Klassen in einer Datei (2 Namespaces) befanden hat das Konvertieren super geklappt. Mit Ausnahme das sich alles in einer Datei befand (kein laden einer dll notwendig) hat sich bei der Konvertierung nichts geändert.

Ich hoffe jemand von euch hat eine Idee dazu, Danke.

Gruß
Crone

28.04.2014 - 13:39 Uhr

Wenn du in Dynamics Nav zuvor entwickelte DLL's verwenden möchtest, muss du lediglich die DLL erstellen und in Windows registrieren. Anschließend kannst du diese als ganz normale Variable in Navision erstellen (DatenTyp: Automation in neueren Version glaube ich heißt der Daten-Typ: DotNet)

um eine DLL zu Registrieren kann folgendes in einer Batch-Datei gepackt und ausgeführt werden. (OurDLL.dll durch dein DLL-Namen ersetzen!)

SET GACUTIL="C:\Program Files (X86)\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe"
SET REGASM="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm.exe"
%REGASM% OurDll.dll /tlb:OurDll.tlb
%GACUTIL% /i OurDll.dll

Zusätzlich solltest du folgendes Tutorial befolgen... Nun sollte nichts mehr schief gehen 😃

Writing an automation for Navision in C#

Wenn du z.B. Custom-Controls entwickeln möchtet sollte folgender Link ganz hilfreich sein.

Walkthrough: Creating and Using a RoleTailored Client Control Add-in

Zu guter letzt sei gesagt das Google alle fragen zum Thema Interorp und Dynamics Nav schnell beantwortet hätte... auch wenn die Doku nicht so der bringer ist gibt's mittlerweile eine Menge Tutorials.

Gruß Marcel

21.03.2014 - 16:01 Uhr

Wenn ein Dreieck 3D sein soll muss es eine Dicke haben daher würde man um genau zu sein ein Prisma Zeichnen. Würde man dies nicht tun könnte man das Dreieck von der Seite nicht sehen da es ja keine Dicke hat... Sprich wenn man ein 3 Dimensionales Dreieck zeichnen möchte muss man zwangsläufig ein Prisma zeichnen. Daher 2 Dreiecke die übereinander liegen und die verbindungswänder der zwei Dreiecke mit einer minimalen Dicken.

Das bedeutet alle Punkte werden mindestens zweimal gezeichnet und die Ränder sogar 3 mal wenn er jedoch nur ein Dreieck in einen Raumzeichnen möchte (was bedeutet dass,das Dreieck nicht 3 Dimensional ist) dann braucht man das natürlich nicht.

21.03.2014 - 14:09 Uhr

Wenn die Kompelierungzeit stark zu nimmt hat das fast immer etwas mit externen Medien zu tun also nicht mit dem Code sondern mit z.B. Bildern, Videos bzw. irgendwelches Content welches aber auch ein Kompile Vorgang durchläuft. Das war zu mindestens bei mir meistens der Grund das es schonmal mehrere Minuten dauerte.

21.03.2014 - 13:52 Uhr

Die Pixel müssen doch alle Doppelt gesetzt werden Wenn dein Dreieck 3 Dimensionen hat, hast du 2 Dreiecke die Exakt aufeinander liegen mit einen gewissen abstand dazwischen die Rand bereiche müsste also daher mindestens 3 mal gezeichnet werden da ja noch die verbindungspixel gezeichnet werden müssen.

jedoch schaust du mit deiner "Kamera" von oben direkt auf dein Dreieck du würdest also nie mitbekommen ob dein Dreieck nun 2D oder 3D ist. Du brauchst also erstmal eine Kamera bzw. ansicht die es dir erlaubt das Dreieck von allen Seiten zu betrachten vorher kannst du nicht wirklich gescheit testen.

Wenn auf einen bestimmten Punkt schon etwas gezeichnet worden ist solltest du im normalfall diesen nicht nicht nochmal zeichnen, da du diese Pixel ja nicht mehr sehen kannst außer du fügst Tranzparenz hinzu.

Es muss auch darauf geachtet werden das du deine Objekte bzw. dein Dreieck von hinten nachvorne zeichnste sonst überdeckt die rückseite deine forderseite. (Nur notwendig wenn du nur das Zeichnen möchtest was du auch siehst ... was durchaus sinnvoll ist, jedoch muss du dein Dreieck immer wenn die Kamera oder Ansicht sich änder neu zeichnen)

Also jedemenge zu tun bevor das wirklich richtig funktioniert.

An hand deines Codes kann man leider nicht viel helfen grade auch weil wichtiger Code fehlt.

z.B. die Funktion Dist(list1, list2)

Am besten wäre es wenn du erstmal structs erstelltst z.B. wie in XNA
Vector3(x, y, z)
Vector2(X, y) oder auch Point
Line(Vector2 start, Vector2 ziel)

solche sachen sind viel einfacher zu verstehen und helfen dir auch ungemein weiter.

Ich hoffe ich konnte dir ein bisschen helfen.

Grüße

23.10.2013 - 08:39 Uhr

Ein object also z.B. eine Liste werden grundsätzlich als Referenz behandelt und nicht als Kopie, sogesehen gibst du der ComboBox ein Link zur Quellen, löscht du nun bei einer ComboBox etwas wird dies an die Quelle weitergeleitet in dem Fall die List<string>. Da beide aber als Quelle deine List haben wird das Element auch aus der zweiten ComboBox gelöscht.

Entweder du füllst die ComboBoxen selbst indem du die List mit einer Schleife durchläufst und anschließend

ComboBox.Items.Add(WERT)

nutzt oder du erstellst zweite List<string>

07.09.2013 - 18:52 Uhr

Guten Abend,

Ich hoffe ihr könnte mir weiterhelfen nachdem ich schon seit Stunden teste und kein schritt weiter komme 😦

Also ich hab ein Service geschrieben dieser soll jede Sekunde ein Variable hochzählen ...Einfach oder?

Naja komischerweise irgendwie doch nicht den der Timer wird nicht ausgeführt zu mindestens wird kein log-eintrag geschrieben

Hier der Code:

        private const string username = "User";

        public Service1()
        {
            InitializeComponent();
            this.ServiceName = "ComputerTimer";
        }
        private const string path = "C:/Temp/log.srv";
        private StreamWriter sw;
        protected override void OnStart(string[] args)
        {
            try
            {
                if (File.Exists(path))
                {
                    File.Delete(path);

                }
                File.Create(path).Close();

                sw = File.AppendText(path);
                sw.WriteLine("Username: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name + " ; " + Environment.UserName);
                sw.Flush();
                if (Properties.Settings1.Default.Datum == "nichts")
                {
                    Properties.Settings1.Default.Datum = DateTime.Today.ToShortDateString();
                    Properties.Settings1.Default.Sekunden = 0;
                    Properties.Settings1.Default.Save();
                    sw.WriteLine("DATUM UNBEKANNT");
                    sw.Flush();
                }
                else if (Properties.Settings1.Default.Datum == DateTime.Today.ToShortDateString())
                {
                    sw.WriteLine("Seconds: " + Properties.Settings1.Default.Sekunden.ToString());
                    sw.Flush();
                }
                else
                {
                    Properties.Settings1.Default.Datum = DateTime.Today.ToShortDateString();
                    Properties.Settings1.Default.Sekunden = 0;
                    Properties.Settings1.Default.Save();
                }
                sw.WriteLine("PreTimer");
                sw.Flush();
                timer1.Enabled = true;
                timer1.Start();
                sw.WriteLine("PostTimer");
                sw.Flush();
            }
            catch (Exception ex)
            {
                MessageBox.Show("OnStart: " + ex.ToString());
                sw.WriteLine("OnStart: " + ex.ToString());
                sw.Flush();
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (System.Security.Principal.WindowsIdentity.GetCurrent().Name.Contains(username) || Environment.UserName.Contains(username))
                {
                    Properties.Settings1.Default.Sekunden += 1;
                    Properties.Settings1.Default.Save();

                    sw.WriteLine(Properties.Settings1.Default.Sekunden);
                    sw.Flush();
                    
                }
                else
                {
                    sw.WriteLine("FALSE: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
                    sw.Flush();
                }
            }
            catch (Exception ex)
            {
                sw.WriteLine("OnTick: " + ex.ToString());
                sw.Flush();
                MessageBox.Show("OnTick: " + ex.ToString());
            }
        }

Egal wo Log-Eintraäge werden immer geschrieben außer im Timer ... so als wenn dieser nie ausgeführt wird.

Auch die Sekunden in meiner Settings-Datei bleiben immer 0.

Ich stehe jedenfalls auf'en Schlauch.... als Windows-Form-Anwendung funktioniert es super.

Mit freundlichen Grüßen
Crone

25.07.2013 - 14:23 Uhr

Bitte keine unverschämten und freche Antworten von euch.

Wie wäre es den mit keine unverschämten und frechen Fragen von dir?

Ich glaub du hast so ziemlich gegen alles verstoßen was in den Regeln steht ... C-C-C-ComboBreaker 😄

Du solltest deine Frage überarbeiten sonst wird dir glaube ich keiner helfen.

Aber ich kam nicht drum rum mir das mal kurz anzuschauen.

Du solltest dringend mal folgendes Buch durcharbeiten... Visual C# 2012 Galileo Computing

sowas wie "goto" verwendet man nicht mehr und auch im Allgmeinen scheint dein Code ein heilloses durcheinander zu sein.

MFG
Crone

24.07.2013 - 16:56 Uhr

wie beendest du den den Thread?

Ich hoffe nicht mit .Abort().

24.07.2013 - 15:41 Uhr

Danke für die beiden Antworten, sehr nutzlich 😉

24.07.2013 - 12:54 Uhr

Okay hab doch noch eine Lösung gefunden.

        static bool Compare<T>(T x, T y)
        {
            return x.Equals(y);
        }

Damit hat sich die Frage erledigt 😃

24.07.2013 - 12:40 Uhr

Hallo zusammen,

Ich möchte zwei Werte mit einander vergleichen dabei handelt es sich aber um Generische Typen.

Alle Daten sind in ein Dictionary<string, ArrayList> gespeichert

in der ArrayList ist nur ein Datensatz und wurde nur verwendet, da var und T nicht funktionieren.

Nun hab ich mir noch eine Methode erstellt die anhand des Key's im Dictionary das Value sucht und dieses in meinen Gewüschten Datentyp zurück gibt.

private bool Check<T>(string key, T oldValue)
{
    if(GetValueFromDictionary<T>(key) != oldValue)
    {
    }
}

Fehlermeldung:
Der Operator "!=" kann nicht auf Operanden vom Typ "T" und "T" angewendet werden.

Weiß jemand wie ich diese zwei Werte vergleichen kann?
oldValue und Value sind immer vom gleichen DatenTyp der DatenTyp kann aber immer ein anderer sein.

Danke

Mit freundlichen Grüßen
Crone

02.07.2013 - 11:22 Uhr

wie Programmierhans schon gesagt hat, liegt es vermutlich an einer Foreach-Schleife in der du die Collection veränderts z.B. durch .Add() oder .Remove().

Wenn du in einer Schleife die entsprechende Collection verändern willst solltest du lieber eine FOR oder WHILE-Schleife verwenden.

Ohne weiteren Code lässt sich jedenfalls nicht weiter helfen bzw. genauere Aussagen treffen. 😃

Gruß
Crone

28.06.2013 - 08:25 Uhr

Ja ich verwende UDP.

IPEndPoints lassen sich grundsätzlich übertragen nur die variable "Adress" des IPEndPoints wird auf null gesetzt.

Auf übertragungsfehler würde ich es jetzt nicht schieben sonst wäre das Problem glaube ich nicht immer an der selben stellen.

Warum das im Lan funktioniert und im Internet nicht ist mir auch ein Rätsel 😃

Im Lan kann ich so wie du ohne Probleme De-/Serialisieren aber mit .Net 4.0

Naja ich sende nun die IP und den Port als Variablen mit und bau mir daraus den IPEndPoint auf der anderen seite selbst zusamme... das funktioniert wenigstens 😃

27.06.2013 - 09:48 Uhr

Hallo,

Erstmal danke für die Antwort.

Jedoch konnt ich gestern sowie auch heute keine stelle in der Doku finden wo gesagt wird das ein IPEndPoint nicht Serialisierbar ist.

Zum anderen stellt sich dann folgende Frage, Warum lassen sich IPEndPoints aber ohne Probleme im LAN Serialisieren.

Das Problem mit den IPEndPoints hatte ich erst als ich es im Internet mit einen richtigen Server testete. Im Lokalen-Netzwerk war das Serialisieren, jedoch kein Problem und die Applicaiton hat ohne Probleme funktioniert.

Gruß Crone

26.06.2013 - 19:23 Uhr

Hallo zusammen,

Ich versuche zur Zeit mir ein kleines Peer to Peer Programm zu entwickeln

Client verbindet zu Server
Server sendet Client eine Client-liste (Server Serialisiert eine Klasse diese enthält auch einen IPEndPoint.)

Ich hab die Daten beim versendet extra nochmals geprüft, die IPEndPoint.Adress enthält die IP. Beim Client ist IPEndPoint.Adress jedoch null.

Kann mir jemand zufällig sagen wieso?

Es gibt keinerlei Fehlermeldungen und im netz konnte ich bisher auch nichts dazu finden.

Ist IPEndPoint nicht Serialisierbar oder handelt es sich sogar um einen DotNet Bug?

Hier noch mein Code:

            BinaryFormatter binaryF = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(buffer, 0, buffer.Length, false);
            object obj = binaryF.Deserialize(ms);
            BinaryFormatter binaryF = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(1024 * 10);
            binaryF.Serialize(ms, obj);
            ms.Seek(0, SeekOrigin.Begin);
            byte[] buffer = new byte[(int)ms.Length];
            ms.Read(buffer, 0, buffer.Length);
            ms.Close();
18.06.2013 - 08:53 Uhr

genau die Idee mit dem Gerätemanager ist mir auch grade eingefallen, aber ich konnte dort nur etwas finden um den PC aus den Sleepmode zu wecken.

18.06.2013 - 08:46 Uhr

Hallo Asmodis,

hatte das selbe Problem und bin dann nach ein bisschen suchen auch auf SendMessage gestoßen welches auch in Turn your monitor off in c# beschrieben wird

Das mit der Maus kannst du soweit ich weiß nicht verhindern da man durch Windows nicht soviel Kontrolle über die Bildschirme hat, ich hab zu mindestens noch kein Programm gesehen was die Bildschirme Komplett ausschaltet.

Mehr als Stromsparmodus ist nicht drin würde ich sagen, und das Bedeutet grundsätzlich auch das bei einer Mausbewegung automatisch die Bildschirme wieder an gehen. Du kannst natürlich auf das MouseMove event reagieren und die Bildschirme wieder in Stromsparmodus versetzen so mach ich es zu mindestens momentan, da ich keine andere Lösung gefunden habe.

Ich würde mich natürlich freuen wenn du ne bessere Lösung findest, aber mir hat es damals gereicht. Viel glück 😃

Ich hab gelesen das man es bei machen Rechnern im Bios deaktivieren kann, dass eine Mausbewegung die Bildschirme wieder aufweckt.

Gruß Crone

11.06.2013 - 08:36 Uhr

Das kann ich dir leider nicht sagen du brauchst für meinen Code Office 2010
wenn du natürlich neuere oder Ältere Version hast kommt es zu solchen Problemen.

Gruß
Crone

05.06.2013 - 11:18 Uhr

Ah okay dann ist es natürlich doch nützlich ich hab mir einfach die erste Erklärung von Aspektorientierten Programmierung geschnappt und die war irgend nicht so der bringer 😄. Da ging es nämlich darum dieses Logging einfach in Funktionen auszulagern in ein eigenes Programm sozusagen aber denoch musste jede Funktion dafür bearbeitet werden. Das hatte natürlich nur mehr Arbeitsaufwand zur Folge 😃

Danke für den Link sieht sehr nützlich aus 😉

05.06.2013 - 10:56 Uhr

@bredator

Sehr intressante begründung, aber als gänzlich falsch würde ich mein Beitrag nicht abstempeln denn wie du wahrscheinlich gemerkt hast kann man auch dein Beispiel mit den Arbeitgeber auf mein Beitrag anwenden.

Ziel des Angestellten Geld verdienen, Job behalten (Zusammgefasst Finanzielle Sicherheit). Sollte also eine Aufgabe bekommen wird man sein Ziel erfüllen wollen (Aufgabe erledigen) aber man versucht es natürlich wenn man faul ist mit möglichst geringen aufwand. Die Zeit spielt da erstmal keine Rolle da die Zeit sogesehen in der Aufgabenstelllung mit drin steckt.

Eine Person die was ganz anderes macht als die Aufgabe die ihm gestellt worde ist aber auch Finanzielle sicherheit haben möcht könnte ja z.B. eine geniale Idee haben womit die Person hofft viel Geld zu verdinen.

Sprich selbst wenn man eine Aufgabe gestellt bekommt die für einen zwar das Ziel erfüllt gibt es möglicherweise andere Aufgaben die das Ziel einfacher erfüllen bzw. effzienter.(Man wird durch die Idee MultiMillonär und braucht nicht mehr Arbeiten und Aufgaben von anderen erfüllen).

Die erste Frage sollte natürlich lauten "wie ist die Definition von Faul/Faulheit"... wobei ich nach einigem Recharchieren keine klare Antwort gefunden habe viele Qullen und alle mit einer anderen Definition. (Wikipedia vertrau ich da nicht mal abgesehen das der Beitrag als Fehlerhaft gekennzeichnet ist 😄)

Ich glaube Faulheit kann nicht ohne effizients bzw. Minimal Prinzip erklärt werden

Auf dieses Zitat möchte auch noch eingehen:
FAULHEIT (auch Trägheit genannt) ist der mangelnde Wille eines Menschen, zu arbeiten oder sich anzustrengen

Das bedeutet grundsätzlich nichts anderes das die Person keine lust hat etwas zu machen aber jede Person macht etwas um seine Ziele zu erreichen ob nun mit mehr oder weniger Aufwand. Wie gut das Ziel schlussendlich erreicht wurde ist eine andere Frage ... wenn es das Ziel ist die Schule zu schaffen reicht überall eine vier zu haben 😄 und für Arbeiten nicht zu lernen ... Da kommt aber auch der knackpunkt wenn man nicht lernt und nicht die Arbeitsbedingungen kennt kann die Faulheit auch nach hinten los gehen und man schreibt eine fünf weil man nicht damit gerechnet hat das die Arbeit so schwer wird. Es hängt also auch davon ab wie viele Informationen eine Person über eine bestimmte Aufgabe oder Herrausforderung hat.

Sprich durch Faulheit kann es natürlich passieren das man sein Ziel nicht erreicht. Ist man aber geschickt und findet die mitte zwischen nichts lernen und ein lernen (ein bisschen lernen 😄) bekommt man durch das wenige was man gelernt hat noch ne 4 😄.

Also Faulheit kann grundsätzlich Negativ sein aber auch Positiv wenn man es geschickt angeht und dafür braucht man ein bisschen Intelligenz 😄.

Somit gibt es eigentlich zwei arten von Faulheit die Positive und die Negative. 😃

Man ist Faul und erreicht dennoch sein Ziel: Positive Faulheit

Man ist Faul und erreicht sein Ziel nicht: Negative Faulheit

Hier ein Beispiel für das eigentliche Thema:

Jemand hat ein Problem beim Programmieren und möchte mit möglichst wenig zeit und Aufwand das Problem lösen... deshalb erstellt dieser ein Post da dieser zu Faul ist um ausführlich zu googlen oder andere Quellen zu durchsuchen.

Jetzt kann folgendes Passieren:

  1. Keiner kennt die Antwort ... sprich der Beitrag war zeitverschwendung (Negative Faulheit)

  2. Keiner will helfen weil der erste Link bei google schon die Lösung zeigt ... sprich der Beitrag war nicht Faul sondern einfach nur dämlich weil er mit weniger Arbeit und Zeitverlust das Ziel erreicht hätte, wenn er google genutzt hätte (Negative Faulheit)

  3. Die Frage wird Beantwortet... Sprich die Person hat zeit gesparrt und konnte in der Zeit andere Sachen erledigen (Positive Faulheit)

05.06.2013 - 09:20 Uhr

ich möchte mal eine ganz andere sichtweise einbringen. (NICHT NUR BEZOGEN AUFS LERNEN SONDER AUF DIE ALLGMEINE FAULHEIT)

Ich weiß nicht wer es gesagt hat aber ich glaube es war Albert einstein "Faule Menschen sind Klug".

Ich muss sagen wer auch immer das gesagt hat, hat gar nicht so unrecht zu mindestens bei einem anteil der faulen Menschen nicht bei allen 😉

Wer Faul ist sortiert in der Schule alle Blätter immer in Ordnern anstatt diese einfach in den Rucksack zu stecken, da das suchen der Blätter später nämlich viel länger dauert als das einheften.

Viele würde jetzt den der Blätter einfach im Rucksack tut als Faul bezeichnen das wäre aber von der Definition her FALSCH! Das Wort hat mittlerweile seine Bedeutung verloren bzw. verändert.

Faul bedeutet nicht das man seine Ziele nicht erreicht oder nicht umsetzt sondern wie man Sie umsetzt nämlich mit möglichst wenig arbeit ein Ziel erreichen. Wer jetzt in der Schule aufgepasst hat kann daraus schlussfolgern das zu mindestens ein Teil der Faulen Menschen das Ökonomisch Prinzip(Minimalprinzip) aufsich selbst anwenden.

Wer jetzt aufgepasst wird auffolgendes kommen: "Wenn die Person das Ziel hat sein Blatt möglichst schnell wegzustecken dann ist es Faul das Blatt einfach in den Rucksack zu stecken. Wenn die Person aber das Ziel hat sein Blatt möglichst schnell wieder zu finden ist es Faul das Blatt abzuheften."
Sprich Faul sein ist Objektiv garnicht an Beispielen erklärt werden es kann nur aus der Sicht des Menschen erklärt werden und aufgrund dessen was seine Ziele sind.

Das bedeutet das ein Mensch der Faul ist nicht automatisch nichts tut oder nicht gebacken bekommt, sondern es bedeutet das zu mindestens ein Teil der Faulen einfach nur effizient in ihrer Arbeitsgestalltung sind und darüber nachdenken wie Sie vorgehen müssen um ihr Ziel effizient zu erreichen.

Man kann das Prinzip auch auf ein Hartz4ler anwenden (wenn sein Ziel ist den ganzen Tag TV zu schauen und Bier zu Trinken (z.B. durch abhängigkeit) ist er mit seiner Faulheit effizient, da die Person alles erreicht hat was diese möchte und dies Dank Vater-Staat.)

Meiner Meinung nach stellt sich also eine ganz andere Frage... Haben wir uns geringer Ziele gesetzt als die Vorherige Generation? Ich würde behaupt das dies so ist!

EDIT: noch ein kleines Beispiel: (unter der annahme das Faule Menschen Klug sind)

Wir würde es als Faul bezeichnen wenn man 500 Meter mit dem Auto fährt statt zu laufen oder das Fahrrad zu nehmen... Damit haben wir auch recht solang sein es sein Ziel ist den Ort möglichst schnell zu erreichen. Sollte aber sein Ziel nur sein den Ort zu erreichen egal wann dann wäre es Faul mit dem Fahrrad zu fahren.

Wären Faule Menschen nicht Klug wird das Beispiel wie folgt aussehen

Wir würden es als Faul bezeichnen wenn man 500 Meter mit dem Auto fährt statt zu laufen oder das Fahrrad zu nehmen... Damit haben wir auch recht, solang es sein Ziel ist den Ort irgendwann zu erreichen. Sollte aber sein Ziel sein den Ort möglichst schnell zu erreichen dann wäre es Faul mit dem Fahrrad zu fahren.

Sprich egal wie man es dreht Faul sein kann nur aus der Sicht des Menschen und dessen Zielen erklärt und interpretiert werden mit ausnahme man weiß genau was die Ziele des Menschen sind ... das weis man so gut wie nie 😉.

Sprich wenn beim nächsten mal euch jemand als Faul beleidigt liegt das daran das er euere momentanen Ziele nicht kennt. Bzw. Es werden die Ziele der Person die Beleidigt nicht erreicht, weil die andere Person andere Ziele hat.

Typische Situation:
die Mutter hat das Ziel das ihr Sohn das Zimmer aufräumt und bezeichnet ihn als Faul weil dieser aber lieber Zockt und nicht beim aufräumen hilft.

Sohn hat das Ziel zu Zocken und um das Ziel möglichst schnell zu erreichen wird andere Arbeit hinten angestellt.

die Mutter zieht den Stromstecker um ihr Ziel möglichst schnell zuerreichen
Sohn hilft um möglichst schnell sein Ziel zu erreichen (nämlich endlich wieder zocken zu können) (Mutter ist aus sicht des Sohnes Faul weil diese das nicht eben alleine machen kann).

Viel Spaß beim nachdenken 😉

Gruß
Crone

P.S. Dieser Beitrag ist von einen Faulen Menschen geschrieben es ging nur darum inhalt möglichst schnell zu vermitteln, sprich der Text wurde in keinerweise auf Rechtschreibfehler und auch nicht auf wissenschaftlicher ebene überprüft. Desweiteren wurden keine Quellen oder andere Zitate überprüft... = FAUL 😄

Mit möglichst wenig aufwand das Ziel erreicht YEAH 😄

04.06.2013 - 16:48 Uhr

Naja du musst ja dennoch code an dieser stelle einfügen ob du nun eine Funktion aufrufst die schließlich File.AppendAllText aufruft oder direkt File.AppendAllText aufrufst macht kein unterschied bzw. doch es ist sogar schlechter (dauert länger, schlechter lesbar). 😃

04.06.2013 - 14:53 Uhr

Bei solchen Problemen hilf auch häufig das typische Scripting Debuggen 😉

Beispiel:

string content = "METHODEN NAME ODER CODE ABSCHNITT";
System.IO.File.AppendAllText(path, content);

So nun solltest du wissen in welcher Methode der Fehler auftritt.
(ACHTUNG DEN CODE IMMER AM ANFANG EINER METHODE SETZEN!)

Nun kannst du in jeder zeile den gleichen code hinzufügen nur das du content durch die Zeilen-Nummer ersetzt. Sollte die Methode größer sein könntest du die Methode auch vorher noch in mehreren Teilen unterteilen 😃.

Schließlich solltes du eine Zeilennummer bekommen sprich was nach dieser zeile kommt verursacht den Crash.

Ab und zu ein bisschen scripten mit sprachen ohne wirkliche Debugger machen manchmal doch sinn. xDD

Solches Debuggen kostet zwar zeit aber bei manchen problemen kommt man nicht anderes weiter grade wenn keine exceptions erzeugt werden. 😃

Die vorgehensweise ist natürlich im normalfall nicht von nöten.

Mfg
Marcel

04.06.2013 - 08:52 Uhr

Hallo,

Wie du die ganze Tabelle bekommst steht bereits oben im code.

int RowCount = sheet.UsedRange.Rows.Count;
int ColumnCount = sheet.UsedRange.Columns.Count;
Excel.Range r = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[RowCount, ColumnCount]);
object[,] tabelle = ((object[,])r.Value2);

in den Mehrdimensionalen Array steht nun alles drin nun brauchst du das nur noch mit schleifen durchlaufen.

Komm aber nicht auf die idee jeden wert einzelnt aus einer Exceltabelle zu lesen das dauert nämlich deutlich länger.

Der ApplicationClass fehler kam aufgrund einer anderen Version von Excel aber das ist dir ja denke ich bereits aufgefallen 😃

23.05.2013 - 08:28 Uhr

Nein mit Overscan berechnet man nichts sondern man Positioniert die HDMI übertragung richtig.

Wenn du Overscan abschaltest würdest du bei dir auch alles richtig angezeigt bekommen, hab das gleich Problem bei einem anderen Samsung Modell gehabt 😄. Das Problem ist aber das man das nicht bei allen Geräten abschalten kann ... grade bei älteren nicht 😉

mit TitleSafeArea solltest du die Position bestimmen können das funktioniert aber auch nicht bei jedem Gerät 😉

22.05.2013 - 14:33 Uhr

Das hat nichts mit den Programm zu tun sondern liegt an HDMI nennt sich overscan bzw. underscan.

Am besten suchst für dein entsprechendes Modell einfach bei google wie du overscan abschaltest.

22.05.2013 - 08:44 Uhr

Quatsch Du hast doch alle infos wenn du dein Bildschirm auf 1280x720 setzt

IN 2D wäre der Mittelpunkt des Bildschirms an den Koordinaten
X=640 y=360

und oben links wäre X=0 Y=0

IN 3D wäre der Mittelpunkt des Bildschirms an den Koordinaten
x=0 y=0 (z=0) zu mindestens solang wie man die Kamera nicht bewegt 😃

Sprich die auflösung auf dem endgerät ist unintressant da dein Cursor ja nicht an den Endgerät Koordinaten bzw. Größe gekoppelt ist sondern an deine Auflösung die du verwendest. (1280x720)

Du musst dein Programm natürlich noch in Fullscreen setzen dazu verwendet man:

IsFullscreen = true;

Aber das sollte dir denke ich klar sein ohne das sind würde man ja immer im Fenstermodus spielen und das will glaube ich keiner. 😃

Es wäre vielleicht sinnvoll wenn du dich erstmal mit den Koordinatensystem vertraut machst. Z.B. versuchen ein Rechteck zu Zentrieren egal bei welcher Bildschirm auflösung oder allgmeines neu ausrichten von elementen bei änderung der Auflösung.

Hier solltest du auch noch einige 2DGames finden davon solltest du dir vielleicht ein paar mal anschauen und den Code schritt für schritt durchgehen.
Die Projekte sind auch alle sehr gut Dokumentiert. http://xbox.create.msdn.com/en-US/

EDIT:

Noch als kleine Denkhilfte 😃

Stell dir vor du hast 2 User die dein Spiel auf der XBox Spielen wollen
User1 hat eine Full HD TV sprich 1920x1080
User2 hat einen 4k TV sprich 3840 x 2160

würde jetzt dein Spiel mit der Auflösung der Endgeräte nutzen also 1920x1080 oder 3840 x 2160 würdest du beim 4k TV starke Performance-Probleme bekommen desweiteren wären alle Objekte deutlich kleiner mit Ausnahme du würdest eine neue Größe berechnen. Wenn du dir aber andere Games anschaust und dort die Auflösung veränderst siehst du sofort das z.B. in Menüs die Button größer und unscharfer sind, sprich es werden auch keine größen neu berechnet diese sind alle fix 😉.

mal ganz davon abgesehen das die Xbox keine 4k Tv's unterstützen würde wenn man die Auflösung des Bildschirmsnutzen müsste.

21.05.2013 - 08:37 Uhr

Bei xBox sollte man niemals mit der Autoskalierung arbeiten!

Es wird dringend empfohlen das Spiel standardmäßig mit 1280x720 laufen zu lassen.

Die Xbox hat eine gleich bleibende Leistung je höher die auflösung ist desto höher bzw. desto teurer wird ein Zeichenvorgang.Das Bedeutet sobald dein Spiel etwas aufwändiger ist kannst du sowas wie 1920x1080 vergessen 😉.

The Xbox 360 system supports both HDTV and normal television sets, at multiple resolutions (480p, 720p, 1080i, and 1080p)

Du kannst also 640x480, 1280x720 oder 1920x1080 verwenden empfohlen wird aber 1280x720 und wird auch bei den meisten Xbox spielen verwendent.

Sollte das Spiel für den PC sein kannst du die Werte vom Desktop erstmal nutzen, bei Xbox jedoch nicht.

GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height
14.05.2013 - 08:30 Uhr

Sorry für die verspätete antwort das Using muss wie folgt aussehen.

using Excel = Microsoft.Office.Interop.Excel;
08.05.2013 - 15:26 Uhr

Ich hab nun mittlerweile ziemlich viel mit c# in verbindung mit Excel gearbeitet und kann dir nur empfehlen sämtliche Daten komplett auszulesen und anschließend eine neue Excel Datei zu schreiben, das hat mehrere Vorteile:

  1. Du musst nicht die ganzen Excel befehle kennen
  2. Dein Programm ist wesentlich schneller wenn es darum geht Excel Dateien zu verarbeiten oder zu verändern.
  3. Hast du keine Problem mit Exceptions die von Excel kommen und dir die Arbeit schwer machen
  4. Viel kürzere Entwicklungszeit

Um alle Daten aus einen Excel Sheet auszulesen bedarf es folgenden Codes:

            string path = "path/to/your/excel/file.xls";
            Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
            oExcel.Visible = false;
            oExcel.DisplayAlerts = false;
            Excel.Workbooks oBooks = oExcel.Workbooks;
            Excel._Workbook oBook = oBooks.Open(path, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
List<object[,]> Sheets =new List<object[,]>();
            foreach (Excel.Worksheet sheet in oBook.Sheets)
            {
                int RowCount = sheet.UsedRange.Rows.Count;
                int ColumnCount = sheet.UsedRange.Columns.Count;
                Excel.Range r = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[RowCount, ColumnCount]);
                Sheets.Add((object[,])r.Value2);

            }

wenn du nur ein bestimmtes Sheet haben möchte kannst du folgenden Code verwenden:

            Excel.Worksheet firstSheet = (Excel.Worksheet)oBook.Sheets[0];
            int RowCount = firstSheet.UsedRange.Rows.Count;
            int ColumnCount = firstSheet.UsedRange.Columns.Count;
            Excel.Range r = firstSheet.get_Range(firstSheet.Cells[1, 1], firstSheet.Cells[RowCount, ColumnCount]);
            object[,] values = (object[,])r.Value2;

In den mehr dimensionalen object array werden alle werte gespeichert dabei ist zu beachten das der index 0 null ist da der start index bei Excel 1 ist 😃

Mit dem Objekt kannst du anschließend soviel sortieren und bearbeiten wie du willst.

Am ende schreibst du einfach ne neue Excel-Datei.

08.05.2013 - 15:01 Uhr

Ah jetzt ist klar was du suchst Form.Show ist da natürlich sinnlos außer es ist mit Hide versteckt worden.

Da BringToFront bei mir super funktioniert hat geh ich mal davon aus das deine SubForms minimiert sind und in dem fall lautet das Zauberwort:Form.WindowState

                if (form3.WindowState == FormWindowState.Minimized)
                    form3.WindowState = FormWindowState.Normal;
                else
                    form3.BringToFront();

wenn die SubForms minmiert sind muss du diese erstmal wieder maximieren oder auf Normalen Zustand setzen. Sollten die SubForms nicht minimiert sein reicht ein BringToFront für den gewünschten Effekt.

Durch das Maximieren werden die Forms automatisch nach vorne gehollt und ein bringToFront wird nicht mehr benötigt.

Getestet mit 3 Forms ... die HauptForm hat bei mir aber die Forms nach vorne gehollt wenn ich auf ein Button geklickt statt beim Fokusierungs Event.

08.05.2013 - 08:42 Uhr

Du kannst nicht mehrere Forms ganz vorne haben eine Form ist immer die oberste und jede die du anschließend z.b. mit BringToFront aufrufst lässt deine Fokusierte Form um eins nach hinten springen ... Sprich deine Anwendung die du grade im Vordergrund geholt hast geht automatisch wieder im Hintergrund ein endloser Kreislauf du könntest als Anwender also nur mit der 2. SubForm arbeiten... was ziemlich unpraktisch ist 😃. Siehe dazu Screenshot

Suchst du zufällig danach wie man Minimierte Forms wieder aufruft? Weil deine jetzige Frage keinen Praktischen gebrauch hat 😃

um Minimierte Forms aufzurufen nutzt man Form.Show

04.05.2013 - 21:03 Uhr

Ein Server zur Vermittlung der Ip´s muss natürlich gegeben... Es gibt z.B. einige Games die Peer To Peer funktioniert, desweiteren funktionieren viel Tausch-Börsen mit Peer To Peer Programmen wie z.B. emule

Aber UDP Hole Punching hat super funktioniert.

Danke