Laden...
Avatar #avatar-3481.png
Benutzerbeschreibung
'Tis not too late to seek a newer world.

Forenbeiträge von 3r0rXx Ingesamt 55 Beiträge

05.02.2017 - 14:48 Uhr

Der Code ist definitiv falsch.

@Chilic
Das ist das was ich so missverstehe.

Client A erstellt eine neue Verbindung (nicht die mit der A mit dem Server spricht) und ermittelt den Sendeport dieser Verbindung. Über den Server teilt Client A Client B diesen Port mit. Client B öffnet dann die Verbindung zu Client A an diesen Port und schickt ihm etwas.

Zu wem? Erneut zum Server?
Und was nachdem der Sendeport gesendet wurde?
Auf diesem Port [mit einem TCPListener] lauschen?

Lieben Dank!

05.02.2017 - 01:17 Uhr

Gerade das will man doch umgehen... haha

04.02.2017 - 22:52 Uhr

Guten Abend liebe Community,

ich versuche vergeblich TCP Hole Punching anzuwenden.
Folgendes Szenario:

Gegeben ist ein Server ( Mediator) dass auf einkommende Clients wartet.
Verbinden sich zwei Clients sendet der Server jeweils beiden Clients die Ip des jeweiligen anderen Clients ( samt Port) .
Dann starten die Clients ihrerseits einen Listener dass auf den Port lauscht mit dem es zum Server verband.

Nachdem die Listener gestartet worden versuchen beide Clients sich zu verbinden...
Problem: Verbindung werde vom Zielcomputer abgelehnt.

Habe ich etwas missverstanden?

Code für den Client:

class Program
    {
        static void Main(string[] args)
        {

            TcpClient client = new TcpClient();
            client.Connect(new IPEndPoint(IPAddress.Parse("WAN"), 8000));
            BinaryReader binW = new BinaryReader(client.GetStream());
            Console.WriteLine(client.Client.LocalEndPoint);
            new Thread(new ThreadStart(() =>
            {
                while (true)
                {
             
                    string text = binW.ReadString();
                    string ip = text.Split(':')[0];
                    int port = int.Parse(text.Split(':')[1]);
                    Console.WriteLine("Received..");
                    client.Close();
                    TcpClient hole_punched = new TcpClient();
                    hole_punched.Connect(new IPEndPoint(IPAddress.Parse(ip), port));

                    BinaryWriter binWriter = new BinaryWriter(hole_punched.GetStream());
                    binWriter.Write("Hello World Punched!");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Sent!");
                    Console.ForegroundColor = ConsoleColor.Gray;

                }
            })).Start();


            TcpListener localServer = new TcpListener((IPEndPoint)client.Client.LocalEndPoint);
 
            localServer.Start();

            while (true)
            {
                var incoming = localServer.AcceptTcpClient();
                BinaryReader binReader = new BinaryReader(incoming.GetStream());
                Console.WriteLine(binReader.ReadString());

            }



        }

Code für den Mediator:

    class Program
    {
        static void Main(string[] args)
        {

            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, 8000));
            listener.Start();

            Console.WriteLine("Server is running sucessfully!");

            List<Client> clients = new List<Client>();

            while (true)
            {
                var incoming = listener.AcceptTcpClient();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Client connected: " + incoming.Client.RemoteEndPoint);
                Console.ForegroundColor = ConsoleColor.Gray;


 
                for (int i = 0; i < clients.Count; i++)
                {
                    try
                    {
                        clients[i].Writer.Write(incoming.Client.RemoteEndPoint + "");
                    }
                    catch
                    {
                        clients.RemoveAt(i);
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Client disconnected!");
                        Console.ForegroundColor = ConsoleColor.Gray;
                    }
                }
                Client c = new Client(incoming);
                for (int i = 0; i < clients.Count; i++)
                {
                    c.Writer.Write(clients[i].InClient.Client.RemoteEndPoint + "");
                }

                clients.Add(c);


            }

        }
    }

    public class Client
    {
        public BinaryWriter Writer;
        public BinaryReader Reader;

        public TcpClient InClient;
        
        public Client(TcpClient client)
        {
            InClient = client;
            Writer = new BinaryWriter(InClient.GetStream());
            Reader = new BinaryReader(InClient.GetStream());
        }


    }

Kennt ihr ein Kompromiss?
Lieben lieben Dank!

30.10.2015 - 22:16 Uhr

Anders kann man das nicht formulieren... Ich mach kurz ein Video..

Das ist der Grund, wieso es ohne ein Video nicht geht.
Man wird es erst verstehen, wenn man die Problemstellung auch sieht.

Auf den Screenshots sind die Namen Earth, Mercury, Venus et cetera zu sehen.
Einmal dann, wenn es auch sein soll.. also wenn man den Planeten sieht, sieht man auch seinen Namen; und ein anderes Mal, wenn man den Planeten NICHT sieht, aber trotz dessen seinen Namen.

Es tut mir leid, anders ist es einfach nicht zu beschreiben; und wenn dies der Moderation oder den Nutzer dieses Forums einfach zu nervig wird, bitte ich um die Schließung des Threads.

30.10.2015 - 19:19 Uhr

Guten Abend,

[...}indem du deinen Code debuggst und testest:[...]

So hab ich das Ray-Problem gelöst, nichtsdestotrotz, danke Dir ( =.

Also:
Wir nehmen an Planet Pluto liegt auf V3(200000,0,200000)..
Um Pluto nicht zu vernachlässigen, wird eine Linie gezeichnet, die den aktuellen Standort des Planeten Pluto markiert.(Denn Pluto ist weit entfernt lokalisiert)

Gucken wir nun von V3(0,0,0) zu V3(200000,0,200000) wird die Linie auch gezeichnet.(Yaw: 1, Pitch 1.5)

Rotiert man die Kamera aber nun um 180° also (Yaw: 1, Pitch MINUS 1.5) wird ebenso die Linie gezeichnet..

Ein Beispiel als Anhang(statt Linie, String)(Perspektive 1 und Perspektive 2, selbe Position, nur veränderte Yaw und Pitch Werte)

29.10.2015 - 19:22 Uhr

Die Werte liegen zwischen 0.9993f und 1.

EDIT: Ray Intersection klappt nun.. ich hatte das Ray nicht geupdated ^^+.
SpriteBatch Problems steht .

28.10.2015 - 18:55 Uhr

Es tut mir leid,
es ist so:
Ich habe einen Planeten P1.. von dem ziehe ich eine Linie zu B1(0,0,0).
Das klappt auch gut.
Guckt man aber von der selben Position nach oben, wird plötzlich ebenso eine Linie gezeichnet..(Anhang 152)
Anders kann man es nicht formulieren.

Wie würdet ihr denn Strings und Linie im 3d Raum zeichnen?

Viele Grüße,
3r0rXx

28.10.2015 - 15:05 Uhr

Guten Tag,
der Fehler liegt darin, dass wenn ich von der selben Position nach oben schaue, die Linien und die String gezeigt werden...
Anhang 152 ist von der selben Position nur nach oben geschaut... und Anhang 151 ist die selbe Position von unten geschaut.
Das bedeutet, es zeichnet da, wo ich es will, aber es zeichnet auch da, wo ich es nicht will.

Anders kann man das nicht formulieren... Ich mach kurz ein Video..

Gruß.

27.10.2015 - 18:09 Uhr

Konnte Anhang 152 nicht in den ersten Post integrieren... ) =

27.10.2015 - 18:02 Uhr

Guten Tag liebe Community,
ich programmiere gegenwärtig eine Space-Simulation in XNA(Ich verwende XNA weil es Komplikationen mit dem Content Importer des Monogames gibt).

Um die Distanz zur Sonne von Planet P zu bestimmen, nutze ich den Satz des Pythagoras..
Soweit so gut..
Mein Vorhaben ist es, die Distanz von Planet P zur Sonne B zu plotten(in Form einer Linie).

Es funktioniert... jedoch gibt es ein schwerwiegenden Fehler...

Ich konvertiere die Weltkoordinaten in Bildschirmkoordinaten mit dieser Methode um:


        public static Vector2 Vec3ToVec2(GraphicsDevice device, Matrix projection, Matrix view, Matrix world, Vector3 current_pos)
        {
            var coord = device.Viewport.Project(current_pos, projection, view, world);
            return new Vector2(coord.X, coord.Y);
        }

Das funktioniert alles soweit.. Die Sonne B liegt bei P(0, 0, 0).. also


Game1.Vec3ToVec2(Device, Camera.ProjectionsMatrix, Camera.ViewMatrix, Matrix.Identity, new Vector3(GLOBALX, GLOBALY, GLOBALZ));

Das Ergebnis aus der "konvenablen" Perspektive:(ANHANG Screenshot 151)

Das Ergebnis aus der "inkonvenablen" Perspektive:(ANHANG Screenshot 152)

26.09.2015 - 23:12 Uhr

Hab eine Möglichkeit gefunden; ich replace einfach das Literal "" durch ` und replace sie erneut zur Laufzeit der kompilierten SourceCode zu ":

       private void runBttn_Click(object sender, EventArgs e)
        {
            OpenFileDialog opF = new OpenFileDialog();
            opF.Filter = "(*.bat)|*.bat";
            opF.ShowDialog();
            if (!String.IsNullOrWhiteSpace(opF.FileName))
            {
                string Source = System.IO.File.ReadAllText(opF.FileName);
                Source = Source.Replace('"', '`');
                //---CREATE SOURCECODE TO COMPILE---
                string SourceCode = @"
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
                " + "string RawSource = @\"" + Source + "\"" + @";
                " + "RawSource = RawSource.Replace('`', '\"');" + @"
                " + "Microsoft.VisualBasic.Interaction.MsgBox(RawSource);" + @"
                " + "" + @"
                " + "" + @"
        }
    }
}
";
                File.WriteAllText(opF.FileName + "_SOURCE.TXT", SourceCode);
                compileSourceCode(SourceCode, opF.FileName + ".exe");
            }
        }

Funktioniert ( =
Gruß,
3r0rXx

26.09.2015 - 22:38 Uhr

Hallo,
ich hatte versucht, eine SourceCode zu erzeugen, und diese anschließend zu kompilieren:


        public static bool compileSourceCode(string sourceCode, string name)
        {
            bool result = true;

            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters @params = new CompilerParameters();
            /*~~~~COMPILE~~~~*/

            @params.GenerateInMemory = false;
            var assemblies = AppDomain.CurrentDomain
                                        .GetAssemblies()
                                        .Where(a => !a.IsDynamic)
                                        .Select(a => a.Location);

            @params.ReferencedAssemblies.AddRange(assemblies.ToArray());
            @params.OutputAssembly = name;
            @params.GenerateExecutable = true;
            CompilerResults results = provider.CompileAssemblyFromSource(@params, sourceCode);
            if (results.Errors.HasErrors)
            {
                result = false;
            }
            for (int i = 0; i < results.Errors.Count; i++)
            {
                Debug.WriteLine(results.Errors[i].ErrorText);
            }

            return result;
        }

Problematisch hierbei ist nun, dass die zu kompilierende Source eine Batch-Datei enthält, die zuvor geladen ist.
Dies hat die Folge, dass der CodeDom Compiler die Batch-Datei missinterpretiert, und ich gezwungen bin, die Batch-Source zu korrigieren: Sie enthält nämlich Zeichen wie \ :: @.

Hier die zu kompilierende Source:

    OpenFileDialog opF = new OpenFileDialog();
            opF.Filter = "(*.bat)|*.bat";
            opF.ShowDialog();
            if (!String.IsNullOrWhiteSpace(opF.FileName))
            {
                string Source = System.IO.File.ReadAllText(opF.FileName);

                //---CREATE SOURCECODE TO COMPILE---
                string SourceCode = @"
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
                " + "System.IO.File.WriteAllText(@\"" + opF.FileName + ".bat\",@\"" + Source + "\");" + @"
        }
    }
}
";
                compileSourceCode(SourceCode, opF.FileName + ".exe");
            }

Source enthält die geladene Source der Batch-Datei, opF Filename ist der Ort, an dem die neue Batch-Datei geschrieben werden soll.
Der CodeDom Compiler wertet den Source jedoch als Text innerhalb @"" aus... und dass hat die Folge dass ;
Unerwartetes Zeichen '&#39;.
Unerwartetes Zeichen '&#39;.
Unerwartetes Zeichen '&#39;.
Unerwartetes Zeichen '&#39;.
Unerwartetes Zeichen '&#39;.
Zeilenvorschub in Konstante.
Zu viele Zeichen im Zeichenliteral.
Nicht erkannte Escapesequenz.
Zeilenvorschub in Konstante.
Nicht erkannte Escapesequenz.
Nicht erkannte Escapesequenz.
Nicht erkannte Escapesequenz.
Zeilenvorschub in Konstante.

als Fehler ausgegeben werden.

Gibt es eine Möglichkeit, diese Misere umzugehen?

Post scriptum: Hier die Source der Batch-Datei:


@echo off

:: BatchGotAdmin
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"

echo Server will start!
echo Press enter
pause
net start "FileZilla Server"
cls
echo Server is started
echo Press any key to stop
pause
net stop "FileZilla Server"
pause
exit

Mit freundlichen Grüßen,
3r0rXx

29.07.2015 - 13:37 Uhr

Vorweg bitte ich um Entschuldigung.. kommt nicht wieder vor bizn.

Ich habe es bizn. !

 private void SetUpVertices()
        {
            Random r = new Random();
            float minHeight = float.MaxValue;
            float maxHeight = float.MinValue;
            for (int x = 0; x < Width; x++)
            {
                for (int z = 0; z < Height; z++)
                {
                    if (gHeights[x, z] < minHeight)
                        minHeight = gHeights[x, z];
                    if (gHeights[x, z] > maxHeight)
                        maxHeight = gHeights[x, z];
                    gVertices[x + z * Width].Position = new Vector3(Scale * (x - ((HeightMap.Width - 1) / 2.0f)), gHeights[x, z], Scale * (z - ((HeightMap.Height - 1) / 2.0f)));

                    if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 0.25f / 4.0f)
                        gVertices[x + z * Width].Color = Color.Blue;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 2.0f / 4.0f)
                        gVertices[x + z * Width].Color = Color.Green;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 3.0f / 4.0f)
                        gVertices[x + z * Width].Color = Color.SaddleBrown;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight * 3.5f / 4.0f))
                        gVertices[x + z * Width].Color = Color.Gray;
                    else
                        gVertices[x + z * Width].Color = Color.White;
                }
            }
        }

Musste die Vertices in in Relation zum Scale-Faktor und der Heightmap setzen.

Funktioniert prima!

29.07.2015 - 04:10 Uhr

Guten Morgen liebe Community,
es ist mir gelungen ein Terrain zu rendern bizn.

Mein nächstes Ziel ist eine Kollisionsabfrage im Terrain durch die sogenannte "GetHeight(xy)"-Methode.

Folgenden Code habe ich aus der XNA-Community :

     public float GetHeight(Vector3 cameraPosition)
        {
            Vector3 heightmapPosition = Vector3.Zero;
            heightmapPosition.X = -(gHeights.GetLength(0) - 1) / 2 * Scale;
            heightmapPosition.Z = -(gHeights.GetLength(1) - 1) / 2 * Scale;
            Vector3 positionOnHeightmap = cameraPosition - heightmapPosition;
            int left, top;
            left = (int)positionOnHeightmap.X / (int)Scale;
            top = (int)positionOnHeightmap.Z / (int)Scale;
            float xNormalized = (positionOnHeightmap.X % Scale) / Scale;
            float zNormalized = (positionOnHeightmap.Z % Scale) / Scale;
            float topHeight = MathHelper.Lerp(
                gHeights[left, top],
                gHeights[left + 1, top],
                xNormalized);
            float bottomHeight = MathHelper.Lerp(
                gHeights[left, top + 1],
                gHeights[left + 1, top + 1],
                xNormalized);
            return MathHelper.Lerp(topHeight, bottomHeight, zNormalized);
        }

Die Problematik hierbei ist nun, das völlig wirre Werte ausgegeben werden.
Ich denke es liegt am Scale-Faktor, diese setzte ich auf 1 ; selbe Problematik.

Hier meine Terrain-Class:


    public class Terrain
    {
        private GraphicsDevice gDevice;
        private Game1 gGame;

        private BasicEffect gEffect;

        private VertexPositionColorNormal[] gVertices;
        private Int32[] gIndices;
        
        private float[,] gHeights;
        private float Scale;

        private List<int> IndicesWater;

        public static int Width { get; set; }
        public static int Height { get; set; }
        public Texture2D TerrainTexture { get; private set; }

        public Terrain(Game1 g, Texture2D tex2d, int w, int h)
        {
            gGame = g;
            gDevice = gGame.GraphicsDevice;
            TerrainTexture = tex2d;
            Width = w;
            Height = h;
        }

        public void Initialize()
        {
            gVertices = new VertexPositionColorNormal[Width * Height];
            gIndices = new Int32[(Width - 1) * (Height - 1) * 6];
            gHeights = new float[Width, Height];
            IndicesWater = new List<int>();
            gEffect = new BasicEffect(gDevice);

        }

        public void LoadContent(Texture2D tex, float scale)
        {
            Scale = scale;
            LoadHeightMap(tex, scale);
            SetUpVertices();
            SetUpIndices();
            SetUpNormals();
        }


        private void SetUpVertices()
        {
            Random r = new Random();
            float minHeight = float.MaxValue;
            float maxHeight = float.MinValue;
            for (int x = 0; x < Width; x++)
            {
                for (int z = 0; z < Height; z++)
                {
                    if (gHeights[x, z] < minHeight)
                        minHeight = gHeights[x, z];
                    if (gHeights[x, z] > maxHeight)
                        maxHeight = gHeights[x, z];
                    gVertices[x + z * Width].Position = new Vector3(x, gHeights[x, z], -z);

                    if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 0.25f / 4.0f)
                        gVertices[x + z * Width].Color = Color.Blue;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 2.0f / 4.0f)
                        gVertices[x + z * Width].Color = Color.Green;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight) * 3.0f / 4.0f)
                        gVertices[x + z * Width].Color = Color.SaddleBrown;
                    else if (gHeights[x, z] < minHeight + (maxHeight - minHeight * 3.5f / 4.0f))
                        gVertices[x + z * Width].Color = Color.Gray;
                    else
                        gVertices[x + z * Width].Color = Color.White;
                }
            }
        }

        public void LoadHeightMap(Texture2D heightmap, float scale)
        {
            Random r = new Random();
            int hW = heightmap.Width;
            int hH = heightmap.Height;
            Color[] colormap = new Color[hW * hH];
            heightmap.GetData<Color>(colormap);

            for (int x = 0; x < hW; x++)
            {
                for (int z = 0; z < hH; z++)
                {
                    gHeights[x, z] = (float)(colormap[x + z * hW].R / scale);
                }
            }

        }

        public float GetHeight(Vector3 cameraPosition)
        {
            Vector3 heightmapPosition = Vector3.Zero;
            heightmapPosition.X = -(gHeights.GetLength(0) - 1) / 2 * Scale;
            heightmapPosition.Z = -(gHeights.GetLength(1) - 1) / 2 * Scale;
            Vector3 positionOnHeightmap = cameraPosition - heightmapPosition;
            int left, top;
            left = (int)positionOnHeightmap.X / (int)Scale;
            top = (int)positionOnHeightmap.Z / (int)Scale;
            float xNormalized = (positionOnHeightmap.X % Scale) / Scale;
            float zNormalized = (positionOnHeightmap.Z % Scale) / Scale;
            float topHeight = MathHelper.Lerp(
                gHeights[left, top],
                gHeights[left + 1, top],
                xNormalized);
            float bottomHeight = MathHelper.Lerp(
                gHeights[left, top + 1],
                gHeights[left + 1, top + 1],
                xNormalized);
            return MathHelper.Lerp(topHeight, bottomHeight, zNormalized);
        }

        private void SetUpIndices()
        {
            int indicesCounter = 0;

            for (int x = 0; x < Width - 1; x++)
            {
                for (int z = 0; z < Height - 1; z++)
                {
                    int downLeft = x + z * Width;
                    int upLeft = x + (z + 1) * Width;

                    int downRight = (x + 1) + z * Width;
                    int upRight = (x + 1) + (z + 1) * Width;

                    gIndices[indicesCounter++] = downLeft;
                    gIndices[indicesCounter++] = upLeft;
                    gIndices[indicesCounter++] = downRight;

                    gIndices[indicesCounter++] = downRight;
                    gIndices[indicesCounter++] = upLeft;
                    gIndices[indicesCounter++] = upRight;
                }
            }
        }

        private void SetUpNormals()
        {
            for (int i = 0; i < gVertices.Length; i++)
            {
                gVertices[i].Normal = Vector3.Zero;
            }
            for (int i = 0; i < gIndices.Length / 3; i++)
            {
                int index1 = gIndices[i * 3];
                int index2 = gIndices[i * 3 + 1];
                int index3 = gIndices[i * 3 + 2];

                Vector3 side1 = gVertices[index1].Position - gVertices[index3].Position;
                Vector3 side2 = gVertices[index1].Position - gVertices[index2].Position;

                Vector3 normal = Vector3.Cross(side1, side2);

                gVertices[index1].Normal += normal;
                gVertices[index2].Normal += normal;
                gVertices[index3].Normal += normal;
            }
            for (int i = 0; i < gVertices.Length; i++)
            {
                gVertices[i].Normal.Normalize();
            }
        }

        public void Render(Camera render_perspective)
        {
            gEffect.Projection = render_perspective.ProjectionsMatrix;
            gEffect.View = render_perspective.ViewMatrix;
            gEffect.EnableDefaultLighting();
            gEffect.TextureEnabled = false;
            gEffect.Texture = TerrainTexture;
            gEffect.FogEnabled = false;
            gEffect.FogColor = Color.DarkGray.ToVector3();
            gEffect.FogStart = 0.0f;
            gEffect.FogEnd = 350;
            gEffect.VertexColorEnabled = true;
            gEffect.CurrentTechnique.Passes[0].Apply();
            gDevice.DrawUserIndexedPrimitives<VertexPositionColorNormal>(PrimitiveType.TriangleList, gVertices, 0, gVertices.Length, gIndices, 0, gIndices.Length / 3);
        }
    }

darauffolgend die Camera-Class


public class Camera
    {

        private Game1 gGame;
        private GraphicsDeviceManager gManager;

        private float yYaw, xPitch;
        private float oX, oY;

        public Matrix ProjectionsMatrix { get; private set; }
        public Matrix ViewMatrix { get; private set; }

        public Vector3 CurrentLocation { get; private set; }

        public static Vector3 ReferenceVector = new Vector3(0, 0, -1);

        public float XYZSpeed { get; private set; }
        public float Sensity { get; private set; }

       

        public Camera(Game1 game)
        {
            gGame = game;
            gManager = gGame.GraphicsDeviceManager;
            CurrentLocation = new Vector3(0, 0, 0); 
            ProjectionsMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, gGame.GraphicsDevice.Viewport.AspectRatio, 1.5f, 500000);
            ViewMatrix = Matrix.CreateLookAt(CurrentLocation, Vector3.Zero, Vector3.Up);
            XYZSpeed = 1f;
            Sensity = 0.007f;
        }

        public void Update(GameTime gTime)
        {
            KeyboardState kbS = Keyboard.GetState();
            Vector3 tmp = Vector3.Zero;

            if (kbS.IsKeyDown(Keys.W))
            {
                tmp = new Vector3(0, 0, -1) * XYZSpeed;
                MoveVector(tmp);
            }
            if (kbS.IsKeyDown(Keys.S))
            {
                tmp = new Vector3(0, 0, 1) * XYZSpeed;
                MoveVector(tmp);
            }
            if (kbS.IsKeyDown(Keys.A))
            {
                tmp = new Vector3(-1, 0, 0) * XYZSpeed;
                MoveVector(tmp);
            }
            if (kbS.IsKeyDown(Keys.D))
            {
                tmp = new Vector3(1, 0, 0) * XYZSpeed;
                MoveVector(tmp);
            }

            if (kbS.IsKeyDown(Keys.Space))
            {
                tmp = new Vector3(0, 1, 0) * XYZSpeed;
                MoveVector(tmp);
            }
            if (kbS.IsKeyDown(Keys.LeftControl))
            {
                tmp = new Vector3(0, -1, 0) * XYZSpeed;
                MoveVector(tmp);
            }

            MouseState mouseState = Mouse.GetState();
            float dX = mouseState.X - oX;
            float dY = mouseState.Y - oY;

            yYaw += -Sensity * dX;

            xPitch += -Sensity * dY;
            xPitch = MathHelper.Clamp(xPitch, -1.5f, 1.5f);

            UpdateMatrices();
            ResetCursor();

            Debug.WriteLine(CurrentLocation);

        }

        private void UpdateMatrices()
        {
            Matrix rotation = Matrix.CreateRotationX(xPitch) * Matrix.CreateRotationY(yYaw);
            Vector3 transformed = Vector3.Transform(ReferenceVector, rotation);
            Vector3 lookAt = CurrentLocation + transformed;
            ViewMatrix = Matrix.CreateLookAt(CurrentLocation, lookAt, Vector3.Up);
        }
        private void ResetCursor()
        {
            Mouse.SetPosition(gManager.PreferredBackBufferWidth / 2, gManager.PreferredBackBufferHeight / 2);
            oX = gManager.PreferredBackBufferWidth / 2;
            oY = gManager.PreferredBackBufferHeight / 2;
        }
        private void MoveVector(Vector3 by)
        {
            Vector3 transformed = Vector3.Transform(by, Matrix.CreateRotationX(xPitch) * Matrix.CreateRotationY(yYaw));
            CurrentLocation += transformed;
        }

    }

CurrentLocation wird der Methode "GetHeight" als Parameter übergeben.

Wie deutlich erkennbar, befinde ich mich ausserhalb der Map; nichtsdestotrotz scheint es, noch in der Map zu sein.

Habe auch keine Skalationsmatrix auf die Grafik angewandt.

Weiß jemand ein Kompromiss?

Mit freundlichen Grüßen,
3r0rXx

Post scriptum:
Es liegt expressis verbis am Scale-Faktor.
Dieser gibt den Abstand zwischen den Vertices wieder.
Wie ist es möglich den Abstand zu berechnen?
Ich bitte um eine Erklärung, nicht eines SourceCodes, danke Euch!

28.07.2015 - 17:41 Uhr

Ah man.
Ich danke Dir.

Echt peinlich. Tut mir leid ^^+

Mit freundlichen Grüßen,
3r0rXx

28.07.2015 - 02:03 Uhr

Hallo liebes Forum,
bin "kürzlich" auf Monogame umgestiegen.

Ich möchte meinem Spiel ein Effekt hinzufügen.
Vergeblich suche ich das Tool "2MGFX"

Weiß jemand wie ich nichtsdestotrotz eine Effekt-File laden kann?

Mit freundlichen Grüßen,
3r0rXx

28.07.2015 - 01:52 Uhr
         ProjectionsMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, gGame.GraphicsDevice.Viewport.AspectRatio, 0.01f, 15000);

Ah danke Dir!
Am Near-Plane lag es ^^+

_:::

Mit freundlichen Grüßen

27.07.2015 - 22:01 Uhr

Hallo liebes Forum,
ich habe ein Terrain in MonoGame, welches als TriangleList beschrieben wird.
Die Reihenfolge der Konnexionen zwischen den Vertices definiere ich durch Indices.

Doch es treten, wie im Bild deutlich erkennbar, grafische Defizite auf:
_:::

Zugehöriger Terrain-Source:

http://pastebin.com/GrWLEwAt

Kennt jemand ein Kompromiss?

Mit freundlichen Grüßen,
3r0rXx

Post scriptum:
Es sei noch gesagt, dass ich den Terrain skaliere.
Wie kann ich nun diese grafischen Defizite kompensieren?

10.05.2015 - 21:50 Uhr

Guten Abend,
ist es in C# möglich, die Fensterposition der Konsolenanwendung auszulesen?

Im Internet ist kein passendes Thema vertreten..

Mit freundlichen Grüßen,
3r0rXx

09.05.2015 - 21:42 Uhr

INDBDA A 1
Gelöst!

Server:


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace mServer
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, 8000));
            listener.Start();
            
            do
            {
                TcpClient tmp = listener.AcceptTcpClient();
                new Thread(new ParameterizedThreadStart(listen)).Start(tmp);
            } while (true);
        }

        static void listen(object client)
        {
            TcpClient c = (TcpClient)client;
            do
            {
                StreamReader sr = new StreamReader(c.GetStream());
                string tmp = sr.ReadLine();

                Console.WriteLine(tmp);
                StreamWriter sw = new StreamWriter(c.GetStream());
                sw.WriteLine(tmp);
                sw.Flush();

            } while (true);
        }
    }
}

Client:

Imports System.Net.Sockets
Imports System.IO

Public Class Form1
    Dim tcp As New TcpClient
    Dim swriter As StreamWriter
    Dim sreader As StreamReader
    Private Delegate Sub DAddItem(ByVal s As String)
    Private Sub AddItem(ByVal s As String)
        ListBox1.Items.Add(s)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        swriter.WriteLine("Hello")
        swriter.Flush()

    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        tcp.Close()

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        tcp = New TcpClient("192.168.0.191", 8000)
        swriter = New StreamWriter(tcp.GetStream())
        sreader = New StreamReader(tcp.GetStream())
        Dim t As New Threading.Thread(AddressOf listen)
        t.Start()

    End Sub

    Sub listen()
        While tcp.Connected
            Try
                Me.Invoke(New DAddItem(AddressOf AddItem), sreader.ReadLine)
            Catch ex As Exception

            End Try
        End While
    End Sub
End Class

( =

09.05.2015 - 21:23 Uhr

Hallo liebes Forum...
ich möchte ein MultiServer programmieren; doch folgendes Problem ereignet sich;
Wenn ich mit der Applikation hercules_3-2-8.exe einen String der Länge 5 sende, empfängt der Server diesen String, nachdem ich den Client geschlossen habe.

Der Code für den Socket:

      
 static void Main(string[] args)
        {
            Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            mainSocket.Bind(new IPEndPoint(IPAddress.Any, 8000));
            mainSocket.Listen(215);
            while (true)
            {
                Socket tmp = mainSocket.Accept();
                NetworkStream nS = new NetworkStream(tmp);
                StreamReader sReader = new StreamReader(nS);

                Console.WriteLine(sReader.ReadLine());
            }
        }

Weiß jemand ein Kompromiss?

Mit freundlichen Grüßen,
3r0rXx

21.09.2014 - 23:30 Uhr

Ich empfehle dir zu prüfen, ob jener Client in der Liste verbunden ist
=> Stetige Überprüfung, ob Client noch mit Server verbunden ist [TCP]

Dies prüfst du mit einer for-Schleife..
=> Wenn der n-te Eintrag die Verbindung hat geschlossen, entferne n-ten Eintrag.

Gruß..
-3r0rXx

21.09.2014 - 22:59 Uhr

Guten Abend,
dieses trifft ein, wenn der selbe Schlüssel in der Dictonary vorhanden ist.
Um diese Problematik zu tilgen, hast du zu prüfen, ob der Client noch verbunden ist...
Wenn dem nicht so ist, entferne Eintrag...

...OR...
Du prüfst ob dieser Schlüssel vorhanden ist, wenn dies nicht der Fall ist, so füge dies der Dictonary hinzu..

Also
Achtungpseudo

if(!clientList.Keys.Contains(DATA)){
//hinzufügen
}

Gruß..
-3r0rXx

02.09.2014 - 03:23 Uhr

*Hust*
Passwörter im Quellcode..
Wie schon mein Vorposter hat erwähnt, ist der WebClient dir mehr von Nutzen, als dass du
a)
Daten im Quelltext "sicherst"
b)
eine FTP-Verbindung aufbaust um Dateien zu ersetzen/aktualisieren.

Ich habe hier ein SourceCode bereitgestellt:

Der Aufruf:

           
           List<ServerDatei> zuAktualisierendeServerDateien = new List<ServerDatei>();
            zuAktualisierendeServerDateien.Add(new ServerDatei.ServerDatei("HTTP://SERVER.DE", "DATEINAME.DLL"));
            foreach (var Daten in zuAktualisierendeServerDateien)
            {
                Daten.Aktualisiere(@"LOKALER PFAD");
            }

Die ServerDatei-Klasse


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
namespace TestMYCSHARPFORUM.ServerDatei
{
    public class ServerDatei
    {
        public string ServerPfad { get; set; }
        public string zuAktualisierendeDatei { get; set; }

        public bool Vollständig { get; private set; }

        private  WebClient _webClient = new WebClient();

        public ServerDatei(string _ServerPfad, string _zuNutzendeDatei)
        {
            this.ServerPfad = _ServerPfad;
            this.zuAktualisierendeDatei = _zuNutzendeDatei;
            this._webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(istVollständig);
        }

        public void Aktualisiere(string _SpeicherOrt)
        {
            //Ist anzupassen
            new Thread(new ParameterizedThreadStart(DownloadeAsynchron)).Start(_SpeicherOrt);
        }
                private void DownloadeAsynchron(object _Ort)
                {
                    this._webClient.DownloadFile(new Uri(this.ServerPfad + this.zuAktualisierendeDatei), (string)_Ort + this.zuAktualisierendeDatei);            
                }

        private void istVollständig(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            this.Vollständig = true;
        }
    }
}

Gruß..
-3r0rXx

01.09.2014 - 04:01 Uhr

Okey ( =
Ich hoffe mal, dass dadurch die Problematik gelöst ist..
Und wieder einmal:

Das ist bestimmt wieder so einfach das man es einfach nicht findet :D

hat es gestimmt 😁

Weitere Risiken bestehen jedoch,
z.B. die des WebClients.

Aber immerhin kannst du es nun auch außerhalb der IDE ausführen 😁

Gruss..
-3r0rXx

01.09.2014 - 03:53 Uhr

Das freut mich 😁 😁

Das Problem ist, dass du DEINE programmspezifische Datei im AppData-Ordner versuchst zu speichern.
Windows ist paranoid.

Nutze doch einfach \UpdateLog\currentVersion.scu ...

Hast du denn CheckVersion(), durch die modifizierte ersetzt?

Gruß..
-3r0rXx

01.09.2014 - 03:47 Uhr

Sooo, teste nun diese Version:

Sei so nett und berichte uns das Resultat.

Gruß..
-3r0rXx

01.09.2014 - 03:37 Uhr

So, hab es nun...
Hierin liegt der Fehler:

private void CheckVersion()
        {
            WebClient web = new WebClient();
            string localPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString();
            string path = localPath + @"\.minecraft\bin\Version.scu";
            web.DownloadFile("http://shellcraft.eu/Downloads/Update/Version.scu", localPath + @"\.minecraft\bin\Version.scu");
            StreamReader reader = new StreamReader(path);
            string VersionServer = reader.ReadLine();
            string path1 = localPath + @"\.minecraft\Version.scu";
            reader.Close();
            StreamReader reader2 = new StreamReader(path1);
            string VersionClient = reader2.ReadLine();
            //lblServerVersion.Text += " " + VersionServer;
            //lblClientVersion.Text += " " + VersionClient;
            if (VersionClient == VersionServer)
            {
                System.Windows.Forms.MessageBox.Show("You have the latest version.", "Shellcraft Launcher - Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                DialogResult res = System.Windows.Forms.MessageBox.Show("An updates is available!\nYou wish to start the Updater now?", "Shellcraft Launcher - Update", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
               // if (res == DialogResult.Yes)
               // {
                   if (UpdaterFound == true)
                    {

                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("Sorry, the updater can't be found!\nPlease reinstall this program or contact the Support.\n\nE-Mail: Support@shellcraft.eu\nForum: 'http://shellcraft.eu/forum/'", "Shellcraft Launcher - No Updater found", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                //}

            }
            reader2.Close();
            File.Delete("Version.scu");
        }

Um genau zu sein hier:

           string localPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString();
            string path = localPath + @"\.minecraft\bin\Version.scu";

Du hast ganz einfach keine Rechte!
Ersetze den Code durch

   WebClient web = new WebClient();
            string localPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString();
            string path = "Test.scu";
            web.DownloadFile("http://shellcraft.eu/Downloads/Update/Version.scu", "Test.scu");
            StreamReader reader = new StreamReader(path);
            string VersionServer = reader.ReadLine();
            string path1 = "Test.scu";
            reader.Close();
            StreamReader reader2 = new StreamReader(path1);
            string VersionClient = reader2.ReadLine();
            //lblServerVersion.Text += " " + VersionServer;
            //lblClientVersion.Text += " " + VersionClient;
            if (VersionClient == VersionServer)
            {
                System.Windows.Forms.MessageBox.Show("You have the latest version.", "Shellcraft Launcher - Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                DialogResult res = System.Windows.Forms.MessageBox.Show("An updates is available!\nYou wish to start the Updater now?", "Shellcraft Launcher - Update", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
               // if (res == DialogResult.Yes)
               // {
                   if (UpdaterFound == true)
                    {

                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("Sorry, the updater can't be found!\nPlease reinstall this program or contact the Support.\n\nE-Mail: Support@shellcraft.eu\nForum: 'http://shellcraft.eu/forum/'", "Shellcraft Launcher - No Updater found", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                //}

            }
            reader2.Close();
            File.Delete("Version.scu");

( =

Gruss..
-3r0rXx

Post scriptum;
myConnectionString muss gültig sein!
(;

01.09.2014 - 03:16 Uhr

Lies mein Edit ( =.

01.09.2014 - 03:14 Uhr

EDIT:
hm, das ist es doch nicht, es scheint so, als hättest du ab

   if (settings.Lang == "DE")

den Grund für diese Ausnahme..

Gruß..
-3r0rXx

EDIT:
Du wirst es nicht glauben!!!
Ich habe dein Launcher starten können!

Die Ausnahme liegt hier:

 public MainWindow()
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception ex)
            {
                //System.Diagnostics.Debug.WriteLine(ex.ToString());
                File.WriteAllText(@"C:\outerror.txt", ex.ToString());
            }
       
            #region Get Settings

            if (File.Exists(settingsPath))
            {
                settings = SCSettings.Read(settingsPath);
                txtUser.Text = settings.launcherSettings.Username;
                txtPass.Password = settings.launcherSettings.Password;
                if (settings.Lang == "DE")
                {
                    #region DE LANG SETTINGS
                    //Labels
                    lblUsername.Content = settings.langSettings.DElblUser;
                    lblPass.Content = settings.langSettings.DElblPass;
                    checkRemember.Content = settings.langSettings.lblRemember;
                    //Buttons

                    #endregion
                }
                else
                {
                    #region EN LANG SETTINGS


                    #endregion
                }
            }
            else
            {
                settings = SCSettings.GetDefault();
                SCSettings.Create(settings, settingsPath);
            }
            #endregion
            notify.Visible = true;

            notify.Icon = new Icon("Resources/shellcraft.ico");
            if (settings.Lang == "DE")
            {
                if (settings.autoCheckUpdates == true)
                {
                    CheckVersion();
                }
            }
            else
            {
                if (settings.autoCheckUpdates == true)
                {
                    CheckVersion();
                }
            }
        }
01.09.2014 - 03:08 Uhr

Haben wir es doch:

Zusätzliche Informationen: Zeilennummer "3" und Zeilenposition "9" von "Durch den Aufruf des Konstruktors für Typ "Launcher.MainWindow", der den angegebenen Bindungseinschränkungen entspricht, wurde eine Ausnahme ausgelöst.".

Falls ein Handler für diese Ausnahme vorhanden ist, kann das Programm möglicherweise weiterhin sicher ausgeführt werden.

[gelöst] UserControl - Probleme mit Konstruktor im Codebehind

Die Ausnahme tritt in der GetNews()-Methode auf..
ab

  MySqlDataReader Reader;
            connection.Open();
01.09.2014 - 02:23 Uhr

X( Selbiges Ergebnis, selbe Fehlersignatur...
Man..
Das ist suspekt.

Tätest du die Projektmappe hochladen, ich wundere mich auch..

Gruß..
-3r0rXx

01.09.2014 - 01:54 Uhr

Hallo,
ich bitte dich dir das: Getting "system.windows.markup.xamlparse" When Running Application Exe
sorgfältig durchzulesen.

Er hat exakt das selbe Problem!

Gruß..
-3r0rXx

01.09.2014 - 01:46 Uhr

Ahso haha!
Ja, selbiges Problem;
Tust jedoch du es vom Debug-Ordner starten funktioniert es?

Besteht denn nicht die Möglichkeit, dass eine Datei im Debug-Ordner ausschlaggebend ist?

Gruß..
-3r0rXx

01.09.2014 - 01:39 Uhr

7Zip kann das Archiv nicht öffnen?
LoL.

Hast du eine defekte Version hochgeladen?

Gruß..
-3r0rXx

01.09.2014 - 01:32 Uhr

Was unmittelbar im Code zu kritisieren ist, ist dass du Passwörter im Quellcode "sicherst".
Nutze doch PHP, Serverbedarf besteht ja keine..

Was ich jedoch mit Ähnliches gemeint hatte, war, dass du die EXE zur Verfügung stellst, so dass ich sie ausführen kann..

Gruß ( =
-3r0rXx

01.09.2014 - 01:23 Uhr

Hmm..
Sind denn adminstratorische Rechte von Nöten?
Das ist suspekt..
Doch vielleicht liegt die Ursache im Programmcode...
Dieser Fehler ist kein Unikat..
Es wäre zielführend, wenn du uns Codesnippet oder Ähnliches freigibst.

Post scriptum:
WPF Application doesn't work on some machines: Stopped working error

Der folgende Nutzer schreibt, dass die Ursache des Problems sein kann, dass die WPF-Anwendung die XAML-Datei nicht laden kann.

01.09.2014 - 01:18 Uhr

Hast du denn Updates installiert?
Es ist wohl kaum der Fall, dass deine Anwendung ohne Weiteres nicht dein Anliegen erfüllt.

Bist du sicher, dass vor Monaten dein gewolltes Ergebnis erzielt wurde?

Gruß..
-3r0rXx

01.09.2014 - 01:09 Uhr

Dein Bruder hat eventualiter( (= ) Visual C++ Redistributable zu installieren!
Denn; Error in running WPF application
Ist dementsprechend keine Exzerption.

"Hatte schon im Netz gesucht doch nichts passendes gefunden."
Hm, hättest du, so fändest du.

Kann es jedoch auch sein, dass im Debug-Ordner potente Referenzen zu finden sind; wie wäre es denn, wenn du den Debug Ordner zur Installation freigibst?

Post scriptum:
Meines Erachtens ist diese Fehlerinterpretation, deine gepostete, von großem Nutzen.
Ich habe es kopiert und ergooglet, voila
An application deployed via ClickOnce throws the "System.Windows.Markup.XamlParse" exception on a target machine
EventType clr20r3 ... system.windows.markup.xamlparse
CLR20r3 -System.Windows.Markup.XamlParse
Gruß..
-3r0rXx

31.08.2014 - 19:12 Uhr

Hallo,
und zwar starte ich diesen Post, weil ich die Perspektive vertrete, dass dieses Forum das Potential hat, spezifische Problematiken schnell und komfortabel zu lösen...
Dieses Potential sollte meines Erachtens mit einer hilfreichen Bewertung priorisiert werden, um eben Beiträge hervorzuheben, dessen Inhalte einer qualitativen Norm entsprechen, bzw. dem Themenstarter von Nutzen waren.

Wie fändet ihr es?

Gruß..
-3r0rXx

31.08.2014 - 15:09 Uhr

@Th69 Offtopic: Das freut mich zu hören ( =.
Es ist mir ebenso ein Rätsel, welchen Grund ich habe, um eventualiter zu bevorzugen.
Mir scheint dieses eleganter..
ergo, teile ich die Ansicht, dass dadurch die Qualität der Postings zunimmt.

Ontopic:
@james~
Na, ich habe dich zu einem Artikel auf Codeproject referenziert;
Hattest du kein wünschenswertes Ergebnis?

Gruß..
-3r0rXx

31.08.2014 - 03:11 Uhr

Fehlt nicht der .AcceptChanges() -Aufruf?
Wie dem auch sei, Inserting and Updating data to MDB
kann dir eventualiter helfen.

Gruß..
-3r0rXx

31.08.2014 - 02:59 Uhr

Wohl kaum ist die Ursache dieser Problematik die NET-Framework, zumal du nicht einer Aktualisierung hast zugestimmt..
Eventualiter hast du den Code "individualisiert", nutze doch den Ausgangscode und versuche es noch ein mal.

Habe jedoch ein anderes Projekt, Deinem adäquaten gefunden:
Screen Captures, Window Captures and Window Icon Captures with Spy++ style Window Finder!

Viel Spaß...
-3r0rXx

29.08.2014 - 23:40 Uhr

Juppi;
nun wird das Bild dementsprechend konvertiert,
das Resultat:

Viele, vielen Dank...

29.08.2014 - 16:25 Uhr

OMG...

Es funktioniert...
Danke ( =...

Das rekonstruieren des Bildes scheint noch defektiv zu sein..
doch dessen Ursache ist mir schon bekannt!

DANKEEEE

29.08.2014 - 12:51 Uhr

Ja tut es ^^+...
Danke!

Jedoch ist nun eine weitere Problematik entstanden...
Ich kann nun 2048 Lange byte arrays über das Internet senden 😁 ,jedoch muss ich mehrmals die TCP-Klasse instanziieren...und verbinden.

Stellt dies eine Gefahr da?
Denn versuche ich mit der Ursprungsverbindung die Daten zu senden, gilt dies als Angriff, sende ich jedoch, in dem ich die TCP-Klasse neu insanziiere und verbinde, verläuft dieses ohne großer Problematik.
Jedoch werden so über 89 Verbindungen hergestellt und wieder geschlossen,
ergo die Funktion wird 89 Mal aufgerufen..

Etwa so:

       
            this.tcpClient = new TcpClient();
            this.tcpClient.Connect(IPAddress.Parse(this.IP), this.Port);
            binaryWriter = new BinaryWriter(this.tcpClient.GetStream());
            binaryWriter.Write(_array);
            binaryWriter.Flush();
            binaryWriter.Close();

Viele Grüße

28.08.2014 - 20:27 Uhr
Per-source UDP Flood Attack Detect (ip=MYIP) Packet Dropped
Whole System UDP Flood Attack from WAN Rule:Default deny
Whole System ACK Flood Attack from WAN Rule:Default deny

So,
das ist der folgende Log-Eintrag..

28.08.2014 - 02:54 Uhr

oh...
Ursache eventualiter geklärt...

"","DHCP: Client receive ACK from ***, IP=***, Lease time=5400."
06:04:41  ","Remote management is disabled."
06:04:41  ","Block WAN PING is disabled.

Der Bildversand gilt als ATTACK...
Aus diesem Grunde wird nicht der ganze byte array empfangen...

Weiß jemand um Rat?
Ist es möglich im Router eine Priorität zu setzen?

Danke...

27.08.2014 - 15:38 Uhr

Ha! hm...
Ich habe das Problem auch im synchronen TCP-Client reproduzieren können...

Ich weiß nun aus welchem Grund der Server keine Daten empfängt.

=>
Ich hatte den Client synchronisiert rekonstruiert...
Der Client agierte exakt wie der asnychrone Client...
Eine Zeichenfolge war möglich über die WAN-IP zu versenden(!)..

Jedoch war es nicht möglich ein byte Array der Länge 2048 über den BinaryWriter in den Stream zu schreiben.
Die Lösung des Problems war nun, vor dem Versand, die TcpClient-Classe neu zu
instanziieren und den aktuellen Stream in den BinaryWriter zu laden das byte Array zu schreiben und den BinaryWriter zu schließen,
voila..
es klappt...
Problematisch nur, dass über 30 Verbindungen verknüpft und geschlossen werden...

Wie vbprogger schon erwähnte, liegt es am WAN-FW.
Dieser blockiert die Anfrage trotz Freischaltung.
Doch stelle ich massiv Verbindungen zum Server her, sendet es..
auch über WAN..

Hat jemand einen anderen Lösungsweg?