首先,我是所有Stack Overflow的新手。
我主要是一名Unity程序员,但我需要在我的Pi上运行一些代码,Unity无法为它构建。因此,我正在使用C#,因此我可以稍后使用Mono进行构建。
我有一个基本的套接字服务器代码,它运行统一,它工作正常。 我尝试将其移植到VS但是在调用Socket.Accept时我总是得到Null Ref异常。
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:我是网络新手,所以我可能做了一些愚蠢的事情而且我没有意识到这一点。答案 0 :(得分:2)
您创建了2个RasPi
个对象,并分别在其上调用Initialize()
和StartListening()
。第二个对象不会与调用Initialize()
的第一个对象具有相同的状态,因此StartListening()
会失败。相反,创建一个对象并在其上调用两个方法:
var rasPi = new RasPi();
rasPi.Initialize();
rasPi.StartListening();