[英]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.