首先,我是所有這個堆棧溢出thingy新來的。Socket.Accept拋出空引用異常
我大多是Unity程序員,但我需要在我的Pi上運行一些代碼,並且Unity不能爲它構建。因此,我使用C#,以便稍後可以使用Mono進行構建。
我有一個基本的套接字服務器代碼運行統一,它工作正常。 我嘗試將它移植到VS,但在調用Socket.Accept時我總是得到一個空引用異常。
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:我是新來的網絡,所以我可能做一些愚蠢的事情,我沒有意識到它。
那是因爲你調用'Initialize'不在同一'RasPi'情況下,你以後叫'StartListening'。更改爲'var rp = new RasPi(); rp.Initialize(); rp.StartListening();' – Evk