我知道这个主题有很多主题,但这是我的第一个Windows服务。
我的应用程序所做的是听取浏览器客户端的连接。
第一种方法是启动一个线程来处理监听连接,这使我的服务在一段时间后关闭。
protected override void OnStart(string[] args)
{
_Server = new ImageStreamingServer();
_Server.Start(8080);
}
public void Start(int port)
{
lock (this)
{
_Thread = new System.Threading.Thread(new
System.Threading.ParameterizedThreadStart(ServerThread));//server thread
_Thread.IsBackground = true;
_Thread.Start(port);
}
}
private void ServerThread(object state)
{
try
{
System.Net.Sockets.Socket Server = new System.Net.Sockets.Socket(
System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
Server.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, (int)state));
Server.Listen(10);
System.Diagnostics.Debug.WriteLine(string.Format("Server started on port {0}.", state));
foreach (System.Net.Sockets.Socket client in Server.IncommingConnectoins())
{
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ClientThread), client);
} // Next client
}
catch (Exception ex)
{ }
this.Stop();
}
以上代码在Windows窗体应用中运行,但服务会在一段时间后自动关闭。
我尝试在同一个线程上运行该类,但该服务甚至无法启动。 (有以下变化)
//_Thread = new System.Threading.Thread(new
//System.Threading.ParameterizedThreadStart(ServerThread));
//_Thread.IsBackground = true;
//_Thread.Start(port);
this.ServerThread(port);