pursuedream
成功=水平+业务+沟通+判断
       WINDOWS服务自动启动的,是指操作系统打开时自动启动的应用程序,必须在注册表里进行配置是启动、手动、禁止。
       它的体制有:服务程序的功能、服务控制程序和服务配置程序。服务程序功能本身用于我们想要解决的实际问题;服务控制程序可以把控制请求发给服务,比如开始、停止等;服务配置用于安装服务。
       
使用网络接口的类:TcpListener

一、         建立服务(创建装配件DLL),它需要端口号、和监听线程。

using System;
using System.IO;
using System.Threading;
using System.Collections.Specialized;
using System.Net.Sockets;
using System.Text;
using System.Net;

namespace QuoteServer
{
    
/// <summary>
    
/// 从文件中随机读取一行数据,并把它发送给客户端
    
/// </summary>

    public class QuoteServer
    
{
        
//Tcp监听
        private TcpListener listener;
        
private int port;  //端口
        private string filename; 
        
private StringCollection quotes; //字符串集合
        private Random random;  //随机数
        private Thread ListenThread;//监听线程


        
构造函数


        
/// <summary>
        
/// 读取文件的
        
/// </summary>

        public void readQuotes()
        
{
            quotes
=new StringCollection();
            
//读取文件
            Stream st=File.OpenRead(filename);
            StreamReader sr
=new StreamReader(st);

            
string quote;
            
while((quote=sr.ReadLine())!=null)
            
{
                quotes.Add(quote);
            }


            sr.Close();
            st.Close();
            random
=new Random();                                              

        }


        
/// <summary>
        
/// 得到随机索引
        
/// </summary>
        
/// <returns></returns>

        protected string getRandomQuoteOfTheDay()
        
{
            
int index=random.Next(quotes.Count);
            
            
return quotes[index];
        }


        
/// <summary>
        
/// 启动方法
        
/// </summary>

        public void Start()
        
{
           readQuotes();
           ListenThread
=new Thread(new ThreadStart(this.Listener));
           ListenThread.Start();

        }


        
/// <summary>
        
/// 进行监听,得到客户的连接,把随机的内容发送给客户
        
/// </summary>

        public void Listener()
        

 
            listener
=new TcpListener(port);
     
            listener.Start();
            
while(true)
            
{
                
//等待连接
                Socket socket=listener.AcceptSocket();

                
if(socket==null)
                
{
                    
return;
                }


                
//把信息发送给客户端
                string message=getRandomQuoteOfTheDay();

                UnicodeEncoding ue
=new UnicodeEncoding();

                
byte[] buffer=ue.GetBytes(message);

                socket.Send(buffer,buffer.Length,
0);

                socket.Close();
                              
            }

        }


        
/// <summary>
        
/// 关闭监听器
        
/// </summary>

        public void Stop()
        
{
            listener.Stop();
        }


        
/// <summary>
        
/// 挂起线程
        
/// </summary>

        public void Suspend()
        
{
            ListenThread.Suspend();
        }


        
/// <summary>
        
/// 重新激活线程
        
/// </summary>

        public void Resume()
        
{
            ListenThread.Resume();
        }


        
/// <summary>
        
/// 重新得到内容
        
/// </summary>

        public void reflush()
        
{
            readQuotes();
        }

    }

}

 安装服务(VS中新建WINDOWS服务),并添加服务功能的装配件,修改该服务的属性:为ServiceName
     它为创建服务的名称。并重写方法OnStart(),OnStop()OnContinue()OnPause()等方法。
         同一进程中可以运行多个用户服务。若要将另一个服务添加到此进程
System.ServiceProcess.ServiceBase[] ServicesToRun;
      ServicesToRun 
= new System.ServiceProcess.ServiceBase[] {new startServer()};
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        重写那写方法:
 
    /// <summary>
        
/// 设置具体的操作,以便服务可以执行它的工作。
        
/// </summary>

        protected override void OnStart(string[] args)
        
{
             qs
=new QuoteServer.QuoteServer("c:\\quote.txt",6789);
             qs.Start();
        }

        
/// <summary>
        
/// 停止此服务。
        
/// </summary>

        protected override void OnStop()
        
{
             qs.Stop();
        }

        
protected override void OnContinue()
        
{
            qs.Resume();
        }


         
protected override void OnPause()
         
{
            qs.Suspend();
      }

   如图:注意:属性AutoLogTrue时候,表示将写日志
   
然后点击其属性的下:“添加安装程序“它会自动创建三个类,其中类“ProjectInstaller“下附带其他两个类
“ServiceProcessInstaller和“ServiceInstaller“,类ServiceInstaller属性下ServiceName的名称要和服务类
的名称相同,ServiceProcessInstaller属性Account要选择为“本地系统”或本地服务。
类:ServiceProcessInstaller如图

类:ServiceInstaller如图:属性StartType指明是手动、自动、还是禁止的,
属性DisplayName为服务的友好名称,目的是监视服务。

然后用命令Installutil.exe工具进行安装或卸载服务,后面直接跟WINDOWS服务名。
安装服务:Installutil windowServer.exe

     卸载服务: Installutil /u windowServer.exe

三、客户端应用该服务。采用TcpClient对端口和服务的主机名进行确认

    TcpClient client=new TcpClient();            client.Connect(this.txbHostName.Text.Trim(),Convert.ToInt32(this.txbPort.Text.Trim()));
    
//接受网络的数据
    NetworkStream stream=client.GetStream();
    
    
byte[] myByte=new byte[1024];
 
    
int received=stream.Read(myByte,0,1024);
    
//接受数据
    this.rtbContent.Text=Encoding.Unicode.GetString(myByte);

四、服务安装完,可以使用命令  net start/stop 服务名  ,来启动/停止服务,也可以使用 命令   
 SC stop
服务名  来停止服务

posted on 2006-09-14 15:44  pursuedream  阅读(271)  评论(0)    收藏  举报