Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 13:26

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Ab und zu NullReferenceException ( List, Class )

Discussion on Ab und zu NullReferenceException ( List, Class ) within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
Ortator's Avatar
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
Ab und zu NullReferenceException ( List, Class )

Hallo,

ich bekomme ab und zu eine NullReferenceException:

Code:
    public class PlayerManager{
        public class PlayerData{
            string[] PlayerDataString = { "" };
            int[] PlayerDataInt = { 0 };
            Socket PlayerDataSocket;
            /* === PlayerDataString ===
             * [0] PlayerName
             * 
             * 
             * */
            /* === PlayerDataInt === 
             * [0] Session ID
             * 
             * */
            public void SetName(string PlayerName){this.PlayerDataString[0] = PlayerName;}
            public void SetSocket(Socket handler){this.PlayerDataSocket = handler;}
            public void SetSessionID(int SessionID){this.PlayerDataInt[0] = SessionID;}
            public Socket GetSocket(){return this.PlayerDataSocket;}
            public int GetSessionID() { return this.PlayerDataInt[0]; }
        }
        private static List<PlayerData> PlayerDataList = new List<PlayerData>();
        public static void CreatePlayerData(Socket PlayerHandler,string PlayerName,int SessionID){
            try{
                PlayerData CreateNewPlayer = new PlayerData();
                //--------------------------------------------
                CreateNewPlayer.SetName(PlayerName);
                CreateNewPlayer.SetSessionID(SessionID);
                CreateNewPlayer.SetSocket(PlayerHandler);
                //--------------------------------------------
                PlayerDataList.Add(CreateNewPlayer);
            }
            catch (Exception ex) { GameConsole.WriteConsoleGameParams(System.ConsoleColor.Red, $"ERROR GetPlayerBySocket()", ex.ToString()); }
        }
        public static PlayerData GetPlayerBySocket(Socket handler){
            PlayerData returnPlayerData = null;
            try {
                for (int i = 0; i <= PlayerDataList.Count-1; i++) {
                    if (PlayerDataList[i].GetSocket() == handler){
                        returnPlayerData = PlayerDataList[i];
                        break;
                    }
                }
                return returnPlayerData;
            }
            catch (Exception ex) { GameConsole.WriteConsoleGameParams(System.ConsoleColor.Red, $"ERROR GetPlayerBySocket()", ex.ToString()); return returnPlayerData; }
        }
    }
Hier wird sie abgefragt:

Code:
        public static void IncommingPacket(Socket handler,byte[] PacketByte){
            try{
                PlayerManager.PlayerData PacketPlayer = PlayerManager.GetPlayerBySocket(handler);
                    if (PacketPlayer.GetSessionID() == 0){
                        string SessionPacket =
GameCrypto.DecryptCustomParameter(PacketByte);
                        string[] SessionParts = SessionPacket.Split(' ');
                        if (SessionParts.Length < 2 || !SessionParts.Any()){
                            return;
                        }
                        int SessionID;
                        if (int.TryParse(SessionParts[1].Split('\\').FirstOrDefault(), out SessionID))
                        {
                            Console.WriteLine("Test .. Session hat sich verbunden: " + SessionID);
                        }
                    }
            }
            catch (Exception ex) { GameConsole.WriteConsoleGameParams(System.ConsoleColor.Red, $"ERROR IncommingPacket", ex.ToString()); }
        }
Hier kommt ab und zu der Fehler:

Code:
if (PacketPlayer.GetSessionID() == 0){
Weiss jemand woran das liegt? An sich findet es immer den Socket ( Habe mal Debug gemacht und es zeigt mir immer die zugehörige List an ( zB. 0,1,2,3... ))

Es währe halt wichtig das dieser Exception nicht kommt , weil ich zB. die Session auslesen muss falls sie 0 ist.

Danke für jeden Tipp
Ortator is offline  
Old 04/23/2017, 18:53   #2


 
Else's Avatar
 
elite*gold: 4
The Black Market: 165/0/0
Join Date: Feb 2008
Posts: 3,846
Received Thanks: 1,267
Die Meldung sagt dir, dass eine Variable nicht besetzt ist. Ich würde ggf. mal in den Stacktrace sehen? Schau dir mal deine Funktion GetPlayerBySocket an. Ich behaupte mal, dass er den Handler im Array nicht findet und da ja sowieso die Variable auf "null" gesetzt wird zu Anfang. Somit wäre deine PacketPlayer-Instanz in der Funktion IncommingPacket "null" und hättest demzufolge auch keine Session-ID, was dann eine NullReferenceException wirft.
Else is offline  
Thanks
1 User
Old 04/24/2017, 07:16   #3



 
IceTrailer's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 2,070
Received Thanks: 820
Du solltest nicht ohne Abfrage auf den ersten Wert (also Index 0) deines Arrays zugreifen.
Mach davor ein Return falls die Größe des Arrays kleiner als 1 ist. Danach würde ich genau ansehen, warum der erste Wert wann nicht besetzt ist.
IceTrailer is offline  
Thanks
1 User
Old 04/24/2017, 07:30   #4
 
Ortator's Avatar
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
Ich probiere mal mein Glück.

MfG
Ortator is offline  
Old 04/24/2017, 16:48   #5
 
0x6a6b's Avatar
 
elite*gold: 45
Join Date: May 2015
Posts: 229
Received Thanks: 184
Also erstens steige auf eine threadsafe collection um wenn möglich und vergiss nie deine objekte zu locken bei write access.
Sobalt du das gemacht hast: tadaa es funktioniert! Warum? Na weil du asyncron(auch wenn du es nicht wissen solltest: das system erstellt dir im hintergrund Threads) in deiner liste operierst und schreibst, das macht das ganze höchst instabil.
0x6a6b is offline  
Old 04/24/2017, 17:50   #6



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,291
Received Thanks: 3,611
tbh kannst du das gar nicht wissen, weil dafür der Rest des Codes fehlt um eine genaue Aussage zu tätigen.
Und sogar wenn es so wäre, müsstest du auch bei einem read locken (bis auf wenige Ausnahmen).
Shawak is offline  
Reply


Similar Threads Similar Threads
[C#] System.NullReferenceException bei List<>
07/08/2012 - .NET Languages - 3 Replies
Hallo bin momentan nebenbei an einem Projekt in C# am arbeiten und habe ein Problem mit der Exception im Titel. Folgendes versuche ich: In dem Programm gibt es eine Personenverwaltung. Ich habe eine Mutterklasse 'Entity' class Entity { int id; string name;
[Visual Basic 2010]System.NullReferenceException
02/13/2011 - .NET Languages - 3 Replies
Hallo Elitepvpers, ich hoffe ich bin hier am richtigen Platz, also ich hab einen Emulator versucht zuverbessern aber es kommt dieser Fehler: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
[VB 2008] "System.NullReferenceException wurde nicht behandelt"
12/30/2009 - .NET Languages - 9 Replies
Und der Fehler passiert in der Zeile: Sub _Anmelden() WebBrowser1.Document.GetElementById("user&qu ot;).InnerText = TextBox2.Text .......... .......... .......... .......... End Sub
[Help]NullReferenceException
11/23/2008 - CO2 Private Server - 3 Replies
Ok... Well first off, I feel like an idiot fot not knowing what to do here. But I'm completely lost, so if somene could point me in the right direction, I'd appreciate it. Seems this is completely random, sometimes it will occur after 30 minutes, sometimes the server can run for hours without an issue. But occasionally this kicks in, and everything freezes. The code effected is... if (Charr.MyClient.Online) if (MyMath.CanSee(Attacked.LocX,...



All times are GMT +2. The time now is 13:26.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.