首页 > 代码库 > MYWebServer

MYWebServer

using System;using System.Collections.Generic;using System.Text;using System.Net.Sockets;using System.Threading;using System.IO;namespace TrialSystem{    /// <summary>    /// 读取到正确的配置信息后调用    /// </summary>    public class MYWebServer    {        #region 直播的笔录 (笔录内容实时更新这个对像)        private static string _reocrdValue = http://www.mamicode.com/"";        public static string ReocrdValue        {            get { return MYWebServer._reocrdValue; }            set { MYWebServer._reocrdValue =http://www.mamicode.com/ value; }        }        #endregion         #region 存放 系统中的临时用户        //public static List<UserEntity> userList = new List<UserEntity>();        public static List<object> userList = new List<object>();        #endregion        #region 连接打开的html页面        //recordValue        public static string reocrdLive = "";        //error.htm        public static string error = "";        //login.htm        public static string login = "";        //login.htm        public static string login1 = "";        #endregion         /////////////////////////////////////////////////////////////////////////////////////        STWebServer webServer;        /// <summary>        /// 初始化网络服务 显示不同网页的基本内容        /// </summary>        /// <param name="ip">系统IP</param>        /// <param name="port">网络端口</param>        /// <param name="SB_ip">设备ip</param>        /// <param name="SB_port">设备端口</param>        /// <param name="SB_userName">设备用户</param>        /// <param name="SB_passWord">设备密码</param>        /// <param name="CrRoomid">视频直播的对讲房间Id</param>        /// <param name="WBBoardID"></param>        public void init(string ip,string port            ,string SB_ip,string SB_port,string SB_userName,string SB_passWord,            string CrRoomid, string WBBoardID,string sttype)        {            try            {                string reocrdLive1 ="";                //switch (sttype)                //{                //    case APP.AppProperty.SB_StrNEWS600:                reocrdLive1 = "";                                          //Application.StartupPath + "\\reocrdLive\\reocrdLive1.htm";                //        break;                //    default:                //        reocrdLive1 = Application.StartupPath + "\\reocrdLive\\reocrdLive.htm";                //        break;                //}                                string text = File.ReadAllText(reocrdLive1, Encoding.Default);                //                text = text.Replace("@url", "http://" + ip + ":" + port + "/bl");                text = text.Replace("@serverIp", ip);//"192.168.1.57"                text = text.Replace("@fdblive_ip", SB_ip);//"192.168.1.163"                text = text.Replace("@fdblive_port", SB_port);//"3000"                text = text.Replace("@fdblive_name", SB_userName);//"888888"                text = text.Replace("@fdblive_pwd", SB_passWord);//"888888"                text = text.Replace("@fdblive_roomId", CrRoomid);//"10500"                text = text.Replace("@WBBoard_roomId", "6BF52A52-394A-11d3-B153-00C04F79FAA6");                MYWebServer.reocrdLive = text;                string error = "";// Application.StartupPath + "\\reocrdLive\\error.htm";                string errortext = File.ReadAllText(error, Encoding.Default);                MYWebServer.error = errortext;                string login = "";//Application.StartupPath + "\\reocrdLive\\login.htm";                string logintext = File.ReadAllText(login, Encoding.Default);                logintext = logintext.Replace("@loginurl", "http://" + ip + ":" + port + "/zb");//"888888"                MYWebServer.login = logintext;                string login1 = "";//Application.StartupPath + "\\reocrdLive\\login1.htm";                string login1text = File.ReadAllText(login1, Encoding.Default);                login1text = login1text.Replace("@loginurl", "http://" + ip + ":" + port + "/zb");//"888888"                MYWebServer.login1 = login1text;            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "初始化网络直播服务");            }                    }        //启动        public void StartWebServer(string ip="", string port="80")        {            try            {                //启动httpServer  应该是进入笔录系统后再启动                STWebServer.port = int.Parse(port);                webServer = new STWebServer();            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "启动网络直播服务");            }                    }        //关闭        public void StopWebServer()        {            try            {                webServer.DisposeServer();            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "关闭网络直播服务");            }        }        //重启httpserver        public void NeadREStartWebServer(string ip = "", string port = "")        {            try            {                webServer.DisposeServer();                STWebServer.port = int.Parse(port);                webServer = new STWebServer();            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "重启网络直播服务");            }                    }    }    internal class HttpRequest    {        private System.Collections.Hashtable paramsKeyMap;        public System.Collections.Hashtable ParamsKeyMap        {            get { return paramsKeyMap; }            set { paramsKeyMap = value; }        }        public void parseParamsMap(string url)        {            string[] ccc = url.Split(?);            if (ccc.Length == 2)            {                string _strparams = ccc[1];                string[] key = _strparams.Split(&);                ParamsKeyMap = new System.Collections.Hashtable(key.Length);                foreach (string k in key)                {                    string[] ky = k.Split(=);                    if (ky.Length == 2)                    {                        paramsKeyMap.Add(ky[0], ky[1]);                    }                    else if (ky.Length == 1)                    {                        paramsKeyMap.Add(ky[0], "");                    }                }            }        }        public string this[string key]        {            get            {                if (ParamsKeyMap != null)                {                    if (ParamsKeyMap.ContainsKey(key))                    {                        return (string)ParamsKeyMap[key];                    }                    else                    {                        return "";                    }                }                else                {                    return "";                }            }        }    }    internal class SocketParams    {        private System.Net.Sockets.Socket m_accpetSocket = null;        private System.Threading.Thread m_curThread = null;        private STWebServer m_ptrWebServer = null;        public SocketParams(ref System.Net.Sockets.Socket target)        {            this.m_accpetSocket = target;        }        public void set_WebServerPtr(STWebServer ptr)        {            this.m_ptrWebServer = ptr;        }        public void set_thread(ref System.Threading.Thread pthread)        {            this.m_curThread = pthread;        }        public void SendHeader(string sHttpVersion, string sMIMEHeader, int iTotBytes, string sStatusCode, ref Socket mySocket)        {            String sBuffer = "";            if (sMIMEHeader.Length == 0)            {                sMIMEHeader = "text/html"; // 默认 text/html            }            //            sBuffer = sBuffer + sHttpVersion + " " + sStatusCode + "\r\n";            sBuffer = sBuffer + "Server: cx1193719-b\r\n";            sBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n";            sBuffer = sBuffer + "Accept-Ranges: bytes\r\n";            sBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n";            Byte[] bSendData = Encoding.ASCII.GetBytes(sBuffer);            SendToBrowser(bSendData, ref mySocket);            Console.WriteLine("Total Bytes : " + iTotBytes.ToString());            //String sBuffer = "";            //if (sMIMEHeader.Length == 0)            //{            //    sMIMEHeader = "text/html"; // 默认 text/html            //}            //sBuffer = sBuffer + sHttpVersion + sStatusCode + "\r\n";            //sBuffer = sBuffer + "Server: cx1193719-b\r\n";            //sBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n";            //sBuffer = sBuffer + "Accept-Ranges: bytes\r\n";            //sBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n";            //Byte[] bSendData = http://www.mamicode.com/Encoding.ASCII.GetBytes(sBuffer);>//SendToBrowser(bSendData, ref mySocket);            //Console.WriteLine("Total Bytes : " + iTotBytes.ToString());        }        private object lockHelper = new object();        private const string xml = "<?xml version=\"1.0\" encoding=\"gb2312\" ?><Record-status>{0}</Record-status>";        public System.Collections.Hashtable parseParamMap(string _param)        {            string[] arr = _param.Split(&);            string[] av;            System.Collections.Hashtable _requestParams = new System.Collections.Hashtable();            foreach (string o in arr)            {                av = o.Split(=);                if (av.Length == 2)                {                    _requestParams.Add(av[0], av[1]);                }            }            return _requestParams;        }        public string getIP(string str)        {            string[] arr = str.Split(:);            if (arr.Length == 2)            {                return arr[0];            }            else            {                return str;            }        }        public int min(int f, int l)        {            if (f > l)            {                return l;            }            else            {                return f;            }        }        public void SendToBrowser(String sData, ref Socket mySocket)        {            SendToBrowser(Encoding.ASCII.GetBytes(sData), ref mySocket);        }        int NET_MTU = 1500;        public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)//23155        {            int numBytes = 0;            try            {                if (mySocket.Connected)                {                    int totallen = bSendData.Length;                    int curr_pos = 0;                    if (totallen <= NET_MTU)                    {                        if ((numBytes = mySocket.Send(bSendData, totallen, 0)) != -1)                        {                        }                    }                    else                    {                        int left_size = NET_MTU;                        int send_len = 0;                        while ((numBytes = mySocket.Send(bSendData, curr_pos, left_size, 0)) != -1)                        {                            curr_pos += left_size;                            send_len += numBytes;                            left_size = totallen - send_len;                            if (left_size >= NET_MTU)                            {                                left_size = NET_MTU;                            }                            if (left_size == 0)                            {                                break;                            }                        }                        Console.WriteLine("###Send Total Size:" + send_len);                    }                }                else                    Console.WriteLine("连接失败....");            }            catch (Exception e)            {                Console.WriteLine("发生错误 : {0} ", e);                //APP.Loger.Writer(e, "SendToBrowser");            }        }        public void ServiceRecv()        {            try            {                do                {                    if (null == m_accpetSocket) break;                    if (m_accpetSocket.Connected)                    {                        int iStartPos = 0;                        String sRequest;                        String sDirName;                        //String sRequestedFile;                        String sErrorMessage;                        int returnStatus = -1;                        Byte[] bReceive = new Byte[1024 * 4];                        try                        {                            int i = m_accpetSocket.Receive(bReceive, bReceive.Length, 0);                        }                        catch (System.Exception e)                        {                            //APP.Loger.Writer(e, "");                            m_accpetSocket.Close();                            continue;                        }                        HttpRequest request = new HttpRequest();                        string icc = "";                        string hostIp = "";                        string sHttpVersion = "";                        try                        {                            string sBuffer = Encoding.ASCII.GetString(bReceive);                            //只处理"get"请求类型                            if (sBuffer.Substring(0, 3) != "GET")                            {                                Console.WriteLine("只处理get请求类型..");                                m_accpetSocket.Close();                                continue;                            }                            // 查找 "HTTP" 的位置                            iStartPos = sBuffer.IndexOf("HTTP", 1);                            sHttpVersion = sBuffer.Substring(iStartPos, 8);                            // 得到请求类型和文件目录文件名                            sRequest = sBuffer.Substring(0, iStartPos - 1);                            sRequest.Replace("\\", "/");                            //如果结尾不是文件名也不是以"/"结尾则加"/"                            if ((sRequest.IndexOf(".") < 1) && (!sRequest.EndsWith("/")))                            {                                sRequest = sRequest + "/";                            }                            //判断参数                            string[] arr = sRequest.Split(?);                            //得到请求文件目录 "GET /loginaAction.cgi?txtUsername=admin&txtPassword=admin"                            sDirName = sRequest.Substring(sRequest.IndexOf("/"), sRequest.LastIndexOf("/") - 3);                            int len = sRequest.IndexOf("/");                            icc = sRequest.Substring(len, sRequest.Length - len);                            request.parseParamsMap(icc);                            //取出IP                            try                            {                                Console.WriteLine("\nClient Connected!!\n==================\nCLient IP {0}\n", m_accpetSocket.RemoteEndPoint);                                hostIp = getIP(m_accpetSocket.RemoteEndPoint.ToString());                            }                            catch (System.Exception e)                            {                                //APP.Loger.Writer(e, "");                            }                        }                        catch (Exception ex) { //APP.Loger.Writer(ex, "");                        }                        try                        {                            //http://localhost:8110/zb  //  浏览器中输入的url,获取整个页面                            //http://localhost:8110/bl  //  网页定时获取笔录                            //main.jpg //  网页logo                            //login.jpg // 登陆Logo                            //PNG图像 .jpg image/png                               //GIF图形 .gif image/gif                               //JPEG图形 .jpeg,.jpg image/jpeg                             //rar application/x-rar-compressed                             //exe application/octet-stream                            icc = icc.ToLower();                            //登陆                             if (icc.IndexOf("/dl") != -1)                            {                                sErrorMessage = LoginWebForm(hostIp, sHttpVersion);                            }                            else if (icc.IndexOf("/zb") != -1)                            {                                lock (lockHelper)                                {                                    string[] arryParam = icc.Split(&);                                    //默认以指挥人员身份登录;0:指挥人员,1:受令人员                                    string loginType = "0";                                    if (arryParam.Length == 5)                                    {                                        loginType = arryParam[3].Replace("login=", "").Replace("/", ""); ;                                    }                                    else if (arryParam.Length <= 3)                                    {                                        return;                                    }                                    string userName = arryParam[1];                                    string password = arryParam[2].Replace("/", "");                                    //得到参数后,判断是否是加密过后的                                    string passwordType = arryParam[4];                                    sErrorMessage = WebForm3(sHttpVersion, ref loginType, userName, password, passwordType);                                }                            }                            else if (icc.IndexOf("/bl") != -1)                            {                                lock (lockHelper)                                {                                    MYWebServer.ReocrdValue = MYWebServer.ReocrdValue.Replace("\n","<br>");                                    //这里取笔录                                    sErrorMessage = MYWebServer.ReocrdValue;                                    SendHeader(sHttpVersion, "text/html", Encoding.UTF8.GetBytes(sErrorMessage).Length, "200 OK", ref m_accpetSocket);                                    SendToBrowser(Encoding.UTF8.GetBytes(sErrorMessage), ref m_accpetSocket);                                    Console.WriteLine("Web Server Running... RECORD");                                }                            }                            else if (icc.Equals("/reocrdlive/img/login.jpg"))                            {                                lock (lockHelper)                                {                                    //这里取loginlogo                                    string loginLogo = "";//Application.StartupPath + "\\reocrdLive\\img\\login.jpg";                                    m_accpetSocket.SendFile(loginLogo);                                }                            }                            else if (icc.Equals("/reocrdlive/img/main.jpg"))                            {                                lock (lockHelper)                                {                                    //这里取mainlogo                                    string mainLogo = "";// Application.StartupPath + "\\reocrdLive\\img\\main.jpg";                                    m_accpetSocket.SendFile(mainLogo);                                }                            }                            else if (icc.IndexOf("/reocrdlive/tools/bord.exe") != -1)                            {                                lock (lockHelper)                                {                                    //这里取mainlogo                                    string bordFile = "";//Application.StartupPath + "\\reocrdLive\\tools\\bord.exe";                                    if (File.Exists(bordFile))                                    {                                        m_accpetSocket.SendFile(bordFile);                                    }                                }                            }                            else if (icc.IndexOf("/reocrdlive/tools/laviview.exe") != -1)                            {                                lock (lockHelper)                                {                                    //这里取mainlogo                                    string laviViewFile = "";//Application.StartupPath + "\\reocrdLive\\tools\\LaviView.exe";                                    m_accpetSocket.SendFile(laviViewFile);                                }                            }                            else if (icc.IndexOf("/reocrdlive/tools/axaudiotalk.exe") != -1)                            {                                lock (lockHelper)                                {                                    //这里取mainlogo                                    string laviViewFile = "";// Application.StartupPath + "\\reocrdLive\\tools\\AxAudioTalk.exe";                                    m_accpetSocket.SendFile(laviViewFile);                                }                            }                            else                            {                                //sErrorMessage = string.Format(xml, returnStatus);                                //SendHeader(sHttpVersion, "", sErrorMessage.Length, " 200 OK", ref m_accpetSocket);                                //SendToBrowser(sErrorMessage, ref m_accpetSocket);                            }                        }                        catch (Exception ex)                        {                            //APP.Loger.Writer(ex, "");                            sErrorMessage = string.Format(xml, returnStatus);                            SendHeader(sHttpVersion, "", sErrorMessage.Length, " 200 OK", ref m_accpetSocket);                            SendToBrowser(sErrorMessage, ref m_accpetSocket);                        }                        try                        {                            m_accpetSocket.Close();                        }                        catch                        {                        }                    }                } while (false);            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "");            }            if (null != m_curThread && null != m_ptrWebServer)            {                m_ptrWebServer.remove_thread(ref m_curThread);            }        }        private String WebForm3(string sHttpVersion, ref string loginType, string userName, string password, string passwordType)        {            String sErrorMessage="";            if (passwordType.Equals("passwordtype=0/"))            {                sErrorMessage = webForm1(sHttpVersion, ref loginType, userName, password);            }            else if (passwordType.Equals("passwordtype=1/"))            {                //foreach (UserEntity ue in MYWebServer.userList)                //{                //    string pasw=EncryptArithmetic.Encode(ue.STPassWord).ToLower();                //    string pasw1 = EncryptArithmetic.Encode(password).ToLower();                //    if (ue.STUserName.Equals(userName) && pasw.Equals(pasw1))                //    {                //        string roleType = "受令";                //        if (!ue.QuanXianJueSe.Equals("指挥"))                //        {                //            //自动切换为受令人员;                //            loginType = "1";                //            roleType = "受令";                //        }                //        if (loginType.Equals("0"))                //        {                //            roleType = "指挥";                //        }                //        else                //        {                //            roleType = "受令";                //        }                //        //跳转到加密界面                //        //这里取登陆界面                //        sErrorMessage = MYWebServer.login1.Replace("@userName", userName).Replace("@Password", EncryptArithmetic.Encode(password).ToLower()).Replace("@login", loginType);                //        SendHeader(sHttpVersion, "text/html", Encoding.Default.GetBytes(sErrorMessage).Length, "200 OK", ref m_accpetSocket);//22510                //        SendToBrowser(Encoding.Default.GetBytes(sErrorMessage), ref m_accpetSocket);                //        break;                //    }                //}            }            return sErrorMessage;        }        private String webForm1(string sHttpVersion, ref string loginType, string userName, string password)        {            String sErrorMessage="";            //hostIp            //foreach (UserEntity ue in MYWebServer.userList)            //{            //    string pasw = EncryptArithmetic.Encode(ue.STPassWord).ToLower();            //    if (ue.STUserName.Equals(userName) && pasw.Equals(password))            //    {            //        string roleType = "受令";            //        if (!ue.QuanXianJueSe.Equals("指挥"))            //        {            //            //自动切换为受令人员;            //            loginType = "1";            //            roleType = "受令";            //        }            //        if (loginType.Equals("0"))            //        {            //            roleType = "指挥";            //        }            //        else            //        {            //            roleType = "受令人员";            //        }            //        string newHTML = MYWebServer.reocrdLive.Replace("@userName", ue.STUserName).Replace("@recv_talk", loginType).Replace("@loginType", roleType);            //        //PublicForm.reocrdLive;            //        //这里取直播界面            //        //sErrorMessage = PublicForm.reocrdLive;//.Replace("@txt_userName", "").Replace("@txt_userName", "");            //        SendHeader(sHttpVersion, "text/html", Encoding.Default.GetBytes(newHTML).Length, "200 OK", ref m_accpetSocket);//22510            //        SendToBrowser(Encoding.Default.GetBytes(newHTML), ref m_accpetSocket);            //        break;            //    }            //}            //这里取直播界面            sErrorMessage = MYWebServer.error;            SendHeader(sHttpVersion, "text/html", Encoding.Default.GetBytes(sErrorMessage).Length, "200 OK", ref m_accpetSocket);//22510            SendToBrowser(Encoding.Default.GetBytes(sErrorMessage), ref m_accpetSocket);            return sErrorMessage;        }        private String LoginWebForm(string hostIp, string sHttpVersion)        {            String sErrorMessage="";            lock (lockHelper)            {                ////hostIp                //foreach (UserEntity ue in MYWebServer.userList)                //{                //    if (ue.BangDingIP!=null&&ue.BangDingIP.Equals(hostIp))                //    {                //        //这里取登陆界面                //        sErrorMessage = MYWebServer.login.Replace("@txt_userName", ue.STUserName).Replace("@txt_password", ue.STPassWord);                //        SendHeader(sHttpVersion, "text/html", Encoding.Default.GetBytes(sErrorMessage).Length, "200 OK", ref m_accpetSocket);//22510                //        SendToBrowser(Encoding.Default.GetBytes(sErrorMessage), ref m_accpetSocket);                //        break;                //    }                //}                ////这里空登陆界面                //sErrorMessage = MYWebServer.login.Replace("@txt_userName", "").Replace("@txt_password", "");                //SendHeader(sHttpVersion, "text/html", Encoding.Default.GetBytes(sErrorMessage).Length, "200 OK", ref m_accpetSocket);//22510                //SendToBrowser(Encoding.Default.GetBytes(sErrorMessage), ref m_accpetSocket);            }            return sErrorMessage;        }    }    internal class STWebServer : IDisposable    {        private const string xml = "<?xml version=\"1.0\" encoding=\"gb2312\" ?><Record-status>{0}</Record-status>";        private TcpListener myListener;        public static int port = 80; // 选者任何闲置端口        public static System.Collections.Hashtable ipMap = new System.Collections.Hashtable();        private Thread th;        //开始兼听端口   同时启动一个兼听进程        public STWebServer()        {            try            {                //开始兼听端口                myListener = new TcpListener(port);                myListener.Start();                Console.WriteLine("Web Server Running... Press ^C to Stop...");                //同时启动一个兼听进程 ‘‘StartListen‘‘                th = new Thread(new ThreadStart(StartListen));                th.Start();            }            catch (Exception e)            {                Console.WriteLine("兼听端口时发生错误 :" + e.ToString());            }        }        ~STWebServer()        {            if (th != null)            {                th.Abort();            }            //t.Stop();        }        public delegate void update(string word);        System.Windows.Forms.ListBox _listBox;        System.Windows.Forms.Label _label;        public void SetListBox(ref System.Windows.Forms.Label _label)        {            this._label = _label;        }        public void ShowMessage(string mes)        {            //_label.Text = mes;            //System.Windows.Forms.MessageBox.Show(mes);        }        public void SetListBox(ref System.Windows.Forms.ListBox _listBox)        {            this._listBox = _listBox;        }        public void _removeList(string word)        {            if (_listBox.Items.Contains(word))            {                int index = 0;                foreach (string str in _listBox.Items)                {                    if (str.Equals(word))                    {                        _listBox.Items.RemoveAt(index);                        break;                    }                    index++;                }                //_listBox.Items.Remove(word);            }        }        public void _updateList(string word)        {            int len = _listBox.Items.Count;            if (len == 0)            {                _listBox.Items.Add(word);            }            else            {                if (_listBox.Items.Contains(word))                {                    int index = 0;                    foreach (string str in _listBox.Items)                    {                        if (str.Equals(word))                        {                            _listBox.Items.RemoveAt(index);                            break;                        }                        index++;                    }                    //_listBox.Items.Remove(word);                }                else                {                    _listBox.Items.Add(word);                }            }        }        public void listShow(string word)        {            this._listBox.BeginInvoke(new update(_updateList), word);        }        public void removeList(string word)        {            this._listBox.BeginInvoke(new update(_removeList), word);        }        public void SendHeader(string sHttpVersion, string sMIMEHeader, int iTotBytes, string sStatusCode, ref Socket mySocket)        {            String sBuffer = "";            if (sMIMEHeader.Length == 0)            {                sMIMEHeader = "text/html"; // 默认 text/html            }            sBuffer = sBuffer + sHttpVersion + sStatusCode + "\r\n";            sBuffer = sBuffer + "Server: cx1193719-b\r\n";            sBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n";            sBuffer = sBuffer + "Accept-Ranges: bytes\r\n";            sBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n";            Byte[] bSendData = Encoding.ASCII.GetBytes(sBuffer);            SendToBrowser(bSendData, ref mySocket);            Console.WriteLine("Total Bytes : " + iTotBytes.ToString());            //String sBuffer = "";            //if (sMIMEHeader.Length == 0)            //{            //    sMIMEHeader = "text/html"; // 默认 text/html            //}            //sBuffer = sBuffer + sHttpVersion + sStatusCode + "\r\n";            //sBuffer = sBuffer + "Server: cx1193719-b\r\n";            //sBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n";            //sBuffer = sBuffer + "Accept-Ranges: bytes\r\n";            //sBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n";            //Byte[] bSendData = http://www.mamicode.com/Encoding.ASCII.GetBytes(sBuffer);>//SendToBrowser(bSendData, ref mySocket);            //Console.WriteLine("Total Bytes : " + iTotBytes.ToString());        }        private object lockHelper = new object();        public void SendToBrowser(String sData, ref Socket mySocket)        {            SendToBrowser(Encoding.ASCII.GetBytes(sData), ref mySocket);        }        int NET_MTU = 1500;        public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)//23155        {            int numBytes = 0;            try            {                if (mySocket.Connected)                {                    int totallen = bSendData.Length;                    int curr_pos = 0;                    if (totallen <= NET_MTU)                    {                        if ((numBytes = mySocket.Send(bSendData, totallen, 0)) != -1)                        {                        }                    }                    else                    {                        int left_size = NET_MTU;                        int send_len = 0;                        while ((numBytes = mySocket.Send(bSendData, curr_pos, left_size, 0)) != -1)                        {                            curr_pos += left_size;                            send_len += numBytes;                            left_size = totallen - send_len;                            if (left_size >= NET_MTU)                            {                                left_size = NET_MTU;                            }                            if (left_size == 0)                            {                                break;                            }                        }                        Console.WriteLine("###Send Total Size:" + send_len);                    }                }                else                    Console.WriteLine("连接失败....");            }            catch (Exception e)            {                Console.WriteLine("发生错误 : {0} ", e);            }        }        public System.Collections.Hashtable parseParamMap(string _param)        {            string[] arr = _param.Split(&);            string[] av;            System.Collections.Hashtable _requestParams = new System.Collections.Hashtable();            foreach (string o in arr)            {                av = o.Split(=);                if (av.Length == 2)                {                    _requestParams.Add(av[0], av[1]);                }            }            return _requestParams;        }        public string getIP(string str)        {            string[] arr = str.Split(:);            if (arr.Length == 2)            {                return arr[0];            }            else            {                return str;            }        }        public int min(int f, int l)        {            if (f > l)            {                return l;            }            else            {                return f;            }        }        private List<Thread> ThList = null;        public void remove_thread(ref Thread traget)        {            try            {                if (null != ThList)                {                    if (ThList.Contains(traget))                    {                        ThList.Remove(traget);                    }                    //traget.Abort();                }            }            catch (Exception ex)            {                //APP.Loger.Writer(ex, "");                //Console.WriteLine(ex.Message);            }        }        public void StartListen()        {            int iStartPos = 0;            String sRequest;            String sDirName;            //String sRequestedFile;            String sErrorMessage;            while (true)            {                //接受新连接                lock (lockHelper)                {                    Socket mySocket = myListener.AcceptSocket();                    SocketParams param = new SocketParams(ref mySocket);                    Thread T = new Thread(new ThreadStart(param.ServiceRecv));                    param.set_thread(ref T);                    param.set_WebServerPtr(this);                    T.Start();                    if (ThList == null)                    {                        ThList = new List<Thread>();                    }                    ThList.Add(T);                }            }        }        public void DisposeServer()        {            try            {                //ViewManager.Instance.clear();                ipMap.Clear();                th.Abort();                myListener.Stop();            }            catch { }        }        #region IDisposable 成员        void IDisposable.Dispose()        {            try            {                DisposeServer();            }            catch { }        }        #endregion    }}

 

MYWebServer