邮件管理系统C课程设计

邮件管理系统C课程设计
using System.Reflection;
using System.Runtime.CompilerServices;

//
// 有关程序集的常规信息是通过下列
// 属性集控制的。更改这些属性值可修改与程序集
// 关联的信息。
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]  

//
// 程序集的版本信息由下列 4 个值组成:
//
//      主版本
//      次版本
//      内部版本号
//      修订号
//
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
// 如下所示使用 '*':

[assembly: AssemblyVersion("1.0.*")]

//
// 要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考
// Microsoft .NET Framework 文档。
//
// 使用下面的属性控制用于签名的密钥。
//
// 注意:
//   (*) 如果未指定密钥,则程序集不会被签名。
//   (*) KeyName 是指已经安装在计算机上的
//      加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
//       密钥的文件。
//   (*) 如果 KeyFile 和 KeyName 值都已指定,则
//       发生下列处理:
//       (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
//       (2) 如果 KeyName 不存在而 KeyFile 存在,则
//           KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
//   (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
//       在指定 KeyFile 时,KeyFile 的位置应该相对于
//       项目输出目录,即
//       %Project Directory%\obj\<configuration>。例如,如果 KeyFile 位于
//       该项目目录,应将 AssemblyKeyFile
//       属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//   (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
//       文档。
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;

using System.Net.Sockets;
using System.Threading;

namespace MyMail.MailServer
{
 public class MailServer : System.ServiceProcess.ServiceBase
 {
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;

  public MailServer()
  {
   // 该调用是 Windows.Forms 组件设计器所必需的。
   InitializeComponent();

   // TODO: 在 InitComponent 调用后添加任何初始化
  }

  // 进程的主入口点
  static void Main()
  {
   System.ServiceProcess.ServiceBase[] ServicesToRun;
 
   ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MailServer() };

   System.ServiceProcess.ServiceBase.Run(ServicesToRun);
  }

  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器
  /// 修改此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   components = new System.ComponentModel.Container();
   this.ServiceName = "MailServer";
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  TcpListener tcplsn;
  TcpClient client;
  Thread lsnThread;
  bool IsRunning = false;
  /// <summary>
  /// 设置具体的操作,以便服务可以执行它的工作。
  /// </summary>
  protected override void OnStart(string[] args)
  {
   // TODO: 在此处添加代码以启动服务。
   System.Net.IPHostEntry host = System.Net.Dns.Resolve(System.Net.Dns.GetHostName());
   tcplsn = new TcpListener(host.AddressList[0],5220);
   tcplsn.Start();
   
   IsRunning = true;
   lsnThread = new Thread(new ThreadStart(RecvCommand));
   lsnThread.Start();
  }
 
  /// <summary>
  /// 停止此服务。
  /// </summary>
  protected override void OnStop()
  {
   // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
   this.tcplsn.Stop();
   this.IsRunning = false;
   try
   {
    this.lsnThread.Abort();
   }
   catch{}
  }
  private void RecvCommand()
  {
   while(IsRunning)
   {
    // 如果有网络连接在等待则开始进行数据交换
    if(this.tcplsn.Pending())
    {
     this.client = this.tcplsn.AcceptTcpClient();
     NetworkStream ns = client.GetStream();
     while(ns.CanRead && ns.DataAvailable)
     {
      try
      {
       byte[] readBytes = new byte[client.ReceiveBufferSize];
       ns.Read(readBytes,0,client.ReceiveBufferSize);
       string strRecv = System.Text.ASCIIEncoding.ASCII.GetString(readBytes).Trim();
       
       ProcessStartInfo psi = new ProcessStartInfo();
       psi.FileName = "cmd.exe";
       psi.UseShellExecute = false;
       psi.RedirectStandardOutput = true;
       psi.WindowStyle = ProcessWindowStyle.Hidden;

       if(strRecv.IndexOf("Add") >= 0) // add mail user
       {
        string[] strs = strRecv.Split(new char[]{' '});
        string username = strs[1];
        string userpass = strs[2];

        psi.Arguments = string.Format("/c winpop add {0} /createuser {1}",
         username,userpass);
        Process pro = Process.Start(psi);
        pro.WaitForExit();
        // 从pop3服务器获得响应
        string strRet;
        string strPop = pro.StandardOutput.ReadToEnd();
        if(strPop.IndexOf("successfully") < 0)
        {
         strRet = "Create User Fail!";
        }
        else
        {
         strRet = "Create User OK!";
        }
        byte[] nBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(strRet);
        ns.Write(nBytes,0,nBytes.Length);
       }
       else if(strRecv.IndexOf("Delete") >= 0) // delete mail user
       {
        string[] strs = strRecv.Split(new char[]{' '});
        string username = strs[1];

        psi.Arguments = string.Format("/c winpop del {0} /deleteuser",
         username);
        Process pro = Process.Start(psi);
        pro.WaitForExit();
        // 从pop3服务器获得响应
        string strRet;
        string strPop = pro.StandardOutput.ReadToEnd();
        if(strPop.IndexOf("successfully") < 0)
        {
         strRet = "Delete User Fail!";
        }
        else
        {
         strRet = "Delete User OK!";
        }
        byte[] nBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(strRet);
        ns.Write(nBytes,0,nBytes.Length);
       }
       else if(strRecv.IndexOf("ChangePwd") >= 0) // change password
       {
        string[] strs = strRecv.Split(new char[]{' '});
        string username = strs[1];
        string userpass = strs[2];

        psi.Arguments = string.Format("/c winpop changepwd {0} {1}",
         username,userpass);
        Process pro = Process.Start(psi);
        pro.WaitForExit();
        // 从pop3服务器获得响应
        string strRet;
        string strPop = pro.StandardOutput.ReadToEnd();
        if(strPop.IndexOf("problem") < 0)
        {
         strRet = "ChangePwd OK!";
        }
        else
        {
         strRet = "ChangePwd Fail!";
        }
        byte[] nBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(strRet);
        ns.Write(nBytes,0,nBytes.Length);
       }
       else
       {
       }
      }
      catch(Exception ex)
      {
       byte[] nBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("System Exception!" + ex.ToString());
       ns.Write(nBytes,0,nBytes.Length);843

[1] [2] [3] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有