所以我创建了一个服务器,需要监听客户端连接,并在我的服务器类的构造函数中:
class Server
{
private Thread listenerThread;
private TcpListener listener;
public Server()
{
this.listener = new TcpListener(IPAddress.Any, 5000);
listenerThread = new Thread(ListenMethod) { IsBackground = true };
listenerThread.Start();
}
private void ListenMethod()
{
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
}
}
}
但是当我在我的主体中创建服务器实例时:
class Program
{
static void Main(string[] args)
{
Server s = new Server();
}
}
服务器应该保持打开状态,因为ListenMethod运行和while循环,但程序似乎完成构造函数并关闭程序。
有什么想法吗?
谢谢:)
答案 0 :(得分:3)
后台线程不会使控制台应用程序保持活动状态,这也是它们的目的。 Server类实例也超出了范围,因为它没有被任何东西使用;在此应用程序的发布版本中,它甚至可能无法编译到应用程序中并进行优化。你需要做这样的事情:
static void Main(string[] args)
{
Server server = new Server();
Console.Write("The server is running. Press any key to stop the server.");
Console.ReadKey();
server.Stop();
}
答案 1 :(得分:0)
在您致电listner
之前,您似乎没有实例化Start()
实例,因此listener.Start()
<代码可能会因NullReferenceException
而崩溃/ p>
我希望这样的事情:
private void ListenMethod()
{
listener = new TcpListener();
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
}
}