簡體   English   中英

Socket.Accept引發Null參考異常

[英]Socket.Accept Throws Null Reference Exception

首先,我對所有這些堆棧溢出感到陌生。

我主要是Unity程序員,但是我需要在Pi上運行一些代碼,而Unity無法為其構建代碼。 因此,我正在使用C#,以便以后可以使用Mono進行構建。

我有一個基本的套接字服務器代碼,可以統一運行,並且工作正常。 我嘗試將其移植到VS,但在調用Socket.Accept時總是收到Null Ref Exception。

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;


class RasPi
{
    IPAddress ipAddress;
    IPEndPoint localEndPoint;

    Socket listener;
    Socket handler;

    int i = 0;

    string data = string.Empty;

    public string IP = "192.168.10.5";
    public int Port = 5001;

    static void Main(string[] args)
    {
        new RasPi().Initialize();
        new RasPi().StartListening();
    }


    void Initialize()
    {
        i = 0;

        ipAddress = IPAddress.Parse(IP);
        localEndPoint = new IPEndPoint(ipAddress, Port);


        listener = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);

        listener.Bind(localEndPoint);
        listener.Listen(10);
    }

    public void StartListening()
    {

        try
        {
            while (true)
            {
                if (i == 0)
                {
                    Console.WriteLine(listener.Accept());
                    handler = listener.Accept();
                }

                data = string.Empty;


                while (true)
                {
                    byte[] bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);

                    data = Encoding.ASCII.GetString(bytes, 0, bytesRec);

                    ProcessData(data);

                    handler.Send(bytes);

                    break;
                }


                //Restart();
                Console.ReadKey();
                break;
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }


   /* void Restart()
    {    
        i++;
        StartListening();
    }*/

    public void ProcessData(string data)
    {
        switch (data)
        {

        }
    }
}

每當我調用listener.Accept();時,都會發生錯誤。

在Unity中,這很好。 有人願意在這里幫助我嗎?

PS:我是Networking的新手,所以我可能在做一些愚蠢的事情,但我沒有意識到。

您創建2個RasPi對象,並StartListening()在它們上調用Initialize()StartListening() 第二個對象的狀態與第一個對象的Initialize()因此StartListening()失敗很慘。 相反,創建一個對象並在其上調用兩個方法:

var rasPi = new RasPi();
rasPi.Initialize();
rasPi.StartListening();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM