繁体   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