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