diff --git a/StuMgmClient/ClientConnect.cs b/StuMgmClient/ClientConnect.cs
index d1015a2..0326176 100644
--- a/StuMgmClient/ClientConnect.cs
+++ b/StuMgmClient/ClientConnect.cs
@@ -1,54 +1,99 @@
 using System;
-using System.IO;
+using System.Diagnostics;
 using System.Net;
 using System.Net.Sockets;
-using System.Runtime.Serialization.Formatters.Binary;
-using StuMgmLib.MyNameSpace;
 
 namespace StuMgmClient
 {
-      class ClientConnect
+    class Comm
     {
-        //连接
-        public static Socket Connect(string ip, int port)
+        #region 基本函数
+        const int bufSize = 1024 * 1024;
+        static IPEndPoint m_ipEndpoint;
+        static Socket m_socket;
+        static byte[] m_buf;
+        
+        void Init(string ip,int port)
         {
-            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             IPAddress ipAdress = IPAddress.Parse(ip);
-            IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, port);
+            m_ipEndpoint = new IPEndPoint(ipAdress, port);
+            m_buf = new byte[bufSize];
+        }
+        void Connect()
+        {
             try
             {
-                client.Connect(ipEndpoint);
+                m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+                m_socket.Connect(m_ipEndpoint);
             }
             catch (Exception ex)
             {
-                return null;
+                Debug.Print(ex.Message);
+            }
+        }
+        bool Send(byte[] data)
+        {
+            try
+            {
+                m_socket.Send(data);
+                return true;
+            }
+            catch(Exception e)
+            {
+                Debug.Print(e.Message);
+                return false;
+            }
+        }
+        bool Receive()
+        {
+            try
+            {
+                Array.Clear(m_buf, 0, m_buf.Length);
+                m_socket.Receive(m_buf);
+                return true;
+            }
+            catch (Exception e)
+            {
+                Debug.Print(e.Message);
+                return false;
             }
-            return client;
         }
-        //发送并进行序列化
-        public static void Send(Socket client)
+        void DisConnect()
         {
-            MemoryStream ms = new MemoryStream();
-            BinaryFormatter iFormatter = new BinaryFormatter();
-            Info.ClientSend cs = new Info.ClientSend();
-            cs.account= 1943;
-            cs.password = "1";
-            iFormatter.Serialize(ms, cs);
-            byte[] buff = ms.GetBuffer();
-            //发送消息到服务端
-            client.Send(buff);
+            client.Close();
         }
-        //接收并进行反序列化
-        public static Info.ServerSend Receive(Socket client)
+        #endregion
+
+        internal ErrCode VerifLogin(string userName,string pawssword,out Roles role)
         {
-            byte[] buffer = new byte[1024 * 1024];
-            client.Receive(buffer);
-            MemoryStream ms = new MemoryStream(buffer);
-            BinaryFormatter iFormatter = new BinaryFormatter();
-            Info.ServerSend serverSend = (Info.ServerSend)iFormatter.Deserialize(ms);
-            return serverSend;
+            role = Roles.Error;
+            Connect();
+            UserInfo cs = new UserInfo(userName,pawssword);
+            byte[] sendBuf;
+            if(Utility.BinSerialize(cs,out sendBuf ))
+                return ErrCode.FailSerial;
+            if (Send(sendBuf))
+                return ErrCode.FailSend;
+            if (Receive())
+                return ErrCode.FailReceive;
+            object o;
+            if (Utility.BinDeserialize(m_buf, out o))
+                return ErrCode.FailDeserial;
+            if (!(o is UserInfo))
+                return ErrCode.ErrData;
+            DisConnect();
+            role = ((UserInfo)o).UserRole;
+            return ErrCode.Success;
         }
 
+
+
+
+
+
+
+        
+
     }
 }
 
diff --git a/StuMgmClient/Data.cs b/StuMgmClient/Data.cs
index 03f26cc..f6f2ee4 100644
--- a/StuMgmClient/Data.cs
+++ b/StuMgmClient/Data.cs
@@ -2,8 +2,20 @@
 using System.Collections.Generic;
 using System.Data;
 
+
+
 namespace StuMgmClient
 {
+    enum ErrCode
+    {
+        Success,
+        FailSerial,
+        FailDeserial,
+        FailSend,
+        FailReceive,
+        ErrData,
+    }
+
     public enum Roles
     {
         NotFound = -1,
@@ -12,6 +24,38 @@ namespace StuMgmClient
         Teacher = 2,
         Student = 3,
     }
+
+    [Serializable]
+    public class UserInfo
+    {
+        public string Account;
+        public string Password;
+        public Roles UserRole;
+        public UserInfo(string account, string password)
+        {
+            Account = account;
+            Password = password;
+        }
+    }
+
+
+
+
+
+    [Serializable]
+    public class ServerSend
+    {
+        public short permission { get; set; }
+        public DataSet ds { get; set; }
+    }
+
+
+}
+
+
+namespace StuMgmClient
+{
+
     class Data
     {
         //状态值字符串转字典
diff --git a/StuMgmClient/LoginForm.cs b/StuMgmClient/LoginForm.cs
index b638db7..a263b36 100644
--- a/StuMgmClient/LoginForm.cs
+++ b/StuMgmClient/LoginForm.cs
@@ -1,10 +1,6 @@
 using System;
-using System.Collections.Generic;
-using System.ComponentModel;
 using System.Data;
-using System.Drawing;
 using System.Net.Sockets;
-using System.Text;
 using System.Text.RegularExpressions;
 using System.Windows.Forms;
 using StuMgmLib.MyNameSpace;
@@ -13,94 +9,101 @@ namespace StuMgmClient
 {
     public partial class LoginForm : Form
     {
-        public static LoginForm login;
         public LoginForm()
         {
             InitializeComponent();
         }
-        string userName = "";
-        string pawssWord = "";
-        DataSet ds = null;
+
+    
+        //DataSet ds = null;
+
+        
+        ////账号密码正则校验
+        //public bool RegexUser(string u, string p)
+        //{
+        //    var regex = new Regex("^(?![0-9]+$)(?![a-zA-Z]+$)(?![a-z!@#$]+$)(?![A-Z!@#$]+$)(?![\\d!@#$]+$)^[a-zA-Z\\d!@#$]{5,20}$");
+        //    //校验密码是否符合
+        //    bool resultU = regex.IsMatch(u);
+        //    bool resultP = regex.IsMatch(p);
+        //    if (resultU == true && resultP == true)
+        //    {
+        //        return true;
+        //    }
+        //    else
+        //    {
+        //        return false;
+        //    }
+        //}
+
+
+
+
+        private void chkPassWord_CheckedChanged(object sender, EventArgs e)
+        {
+
+        }
+
+        private void labForgetPassword_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+
+        }
         private void btnSubmit_Click(object sender, EventArgs e)
         {
             Login();
         }
+
         //登陆方法
         public void Login()
         {
-            userName = txtUserName.Text;
-            pawssWord = txtPassWord.Text;
-
-            //if (!RegexUser(userName, pawssWord))
-            //{
-            //    MessageBox.Show("用户名和密码必须包含数字,小写或大写,5到20位", "提示");
-            //    return;
-            //}
-           
+            string userName = txtUserName.Text;
+            string pawssword = txtPassWord.Text;
             Info.ServerSend ss = ConnectServer();
-            //权限管理
-            int powerNum = (int)ss.permission;
-            ds = ss.ds;
-            switch (powerNum)
-            {
-                case (int)Roles.Student:
-                    StudentForm stu = new StudentForm(ds);
-                    stu.Show(); 
-                    login.Hide();
-                    break;
-                case (int)Roles.Teacher:
-                    TeacherForm tf = new TeacherForm(ds);
-                    tf.Show();
-                    login.Hide();
-                    break;
-                case (int)Roles.Admin:
-                    AdminForm af = new AdminForm();
-                    af.Show();
-                    login.Hide();
-                    break;
-                case (Int32)Roles.NotFound:
-                    MessageBox.Show("账号或用户名错误", "提示");
-                    break;
-            }
+            
 
         }
-        //账号密码正则校验
-        public bool RegexUser(string u, string p)
-        {
-            var regex = new Regex("^(?![0-9]+$)(?![a-zA-Z]+$)(?![a-z!@#$]+$)(?![A-Z!@#$]+$)(?![\\d!@#$]+$)^[a-zA-Z\\d!@#$]{5,20}$");
-            //校验密码是否符合
-            bool resultU = regex.IsMatch(u);
-            bool resultP = regex.IsMatch(p);
-            if (resultU == true && resultP == true)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        }
-        //登陆连接服务器
-        public Info.ServerSend ConnectServer()
-        {
-           Socket client= ClientConnect.Connect("10.10.0.44", 502);
-            if (client== null) 
-            {
-                MessageBox.Show("连接失败", "提示");
-                return null;
-            }
-            else
-            {
-                ClientConnect.Send(client);
-                Info.ServerSend ss = ClientConnect.Receive(client);
-                return ss;
-            }
-        }
-        //窗体加载
-        private void LoginForm_Load(object sender, EventArgs e)
-        {
-            login = this;
         
-        }
+
+        ////权限管理
+        //    int powerNum = (int)ss.permission;
+        //    ds = ss.ds;
+        //    switch (powerNum)
+        //    {
+        //        case (int)Roles.Student:
+        //            StudentForm stu = new StudentForm(ds);
+        //            stu.Show();
+        //            login.Hide();
+        //            break;
+        //        case (int)Roles.Teacher:
+        //            TeacherForm tf = new TeacherForm(ds);
+        //            tf.Show();
+        //            login.Hide();
+        //            break;
+        //        case (int)Roles.Admin:
+        //            AdminForm af = new AdminForm();
+        //            af.Show();
+        //            login.Hide();
+        //            break;
+        //        case (Int32)Roles.NotFound:
+        //            MessageBox.Show("账号或用户名错误", "提示");
+        //            break;
+        //    }
+
+
+        ////登陆连接服务器
+        //public Info.ServerSend ConnectServer()
+        //{
+        //   Socket client= ClientConnect.Connect("10.10.0.44", 502);
+        //    if (client== null) 
+        //    {
+        //        MessageBox.Show("连接失败", "提示");
+        //        return null;
+        //    }
+        //    else
+        //    {
+        //        ClientConnect.Send(client);
+        //        Info.ServerSend ss = ClientConnect.Receive(client);
+        //        return ss;
+        //    }
+        //}
     }
 }
diff --git a/StuMgmClient/LoginForm.designer.cs b/StuMgmClient/LoginForm.designer.cs
index 96556d2..f8a8cd3 100644
--- a/StuMgmClient/LoginForm.designer.cs
+++ b/StuMgmClient/LoginForm.designer.cs
@@ -31,7 +31,7 @@
             this.components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm));
             this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
-            this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+            this.labForgetPassword = new System.Windows.Forms.LinkLabel();
             this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
             this.lblHead = new System.Windows.Forms.Label();
@@ -60,19 +60,20 @@
             // 
             this.toolTip1.IsBalloon = true;
             // 
-            // linkLabel1
-            // 
-            this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
-            this.linkLabel1.AutoSize = true;
-            this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue;
-            this.linkLabel1.Location = new System.Drawing.Point(125, 12);
-            this.linkLabel1.Name = "linkLabel1";
-            this.linkLabel1.Size = new System.Drawing.Size(117, 15);
-            this.linkLabel1.TabIndex = 7;
-            this.linkLabel1.TabStop = true;
-            this.linkLabel1.Text = "忘记密码";
-            this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
-            this.toolTip1.SetToolTip(this.linkLabel1, "请联系教师!");
+            // labForgetPassword
+            // 
+            this.labForgetPassword.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+            this.labForgetPassword.AutoSize = true;
+            this.labForgetPassword.LinkColor = System.Drawing.Color.DodgerBlue;
+            this.labForgetPassword.Location = new System.Drawing.Point(125, 12);
+            this.labForgetPassword.Name = "labForgetPassword";
+            this.labForgetPassword.Size = new System.Drawing.Size(117, 15);
+            this.labForgetPassword.TabIndex = 7;
+            this.labForgetPassword.TabStop = true;
+            this.labForgetPassword.Text = "忘记密码";
+            this.labForgetPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+            this.toolTip1.SetToolTip(this.labForgetPassword, "请联系教师!");
+            this.labForgetPassword.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.labForgetPassword_LinkClicked);
             // 
             // tableLayoutPanel2
             // 
@@ -240,7 +241,7 @@
             this.tableLayoutPanel4.ColumnCount = 2;
             this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
             this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
-            this.tableLayoutPanel4.Controls.Add(this.linkLabel1, 1, 0);
+            this.tableLayoutPanel4.Controls.Add(this.labForgetPassword, 1, 0);
             this.tableLayoutPanel4.Controls.Add(this.chkPassWord, 0, 0);
             this.tableLayoutPanel4.Location = new System.Drawing.Point(102, 165);
             this.tableLayoutPanel4.Name = "tableLayoutPanel4";
@@ -259,6 +260,7 @@
             this.chkPassWord.TabIndex = 6;
             this.chkPassWord.Text = "记住密码";
             this.chkPassWord.UseVisualStyleBackColor = true;
+            this.chkPassWord.CheckedChanged += new System.EventHandler(this.chkPassWord_CheckedChanged);
             // 
             // LoginForm
             // 
@@ -309,7 +311,7 @@
         private System.Windows.Forms.TextBox txtPassWord;
         private System.Windows.Forms.PictureBox picPassWord;
         private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
-        private System.Windows.Forms.LinkLabel linkLabel1;
+        private System.Windows.Forms.LinkLabel labForgetPassword;
         private System.Windows.Forms.CheckBox chkPassWord;
 
     }
diff --git a/StuMgmClient/LoginForm.resx b/StuMgmClient/LoginForm.resx
index f5cd317..c659c5a 100644
--- a/StuMgmClient/LoginForm.resx
+++ b/StuMgmClient/LoginForm.resx
@@ -123,9 +123,6 @@
   <metadata name="txtUserName.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="txtUserName.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="picUserName.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
@@ -153,9 +150,6 @@
   <metadata name="txtPassWord.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="txtPassWord.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <data name="picPassWord.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAA4BJREFUaEPV
diff --git a/StuMgmClient/StuMgmClient.csproj b/StuMgmClient/StuMgmClient.csproj
index 2ae56c9..0056763 100644
--- a/StuMgmClient/StuMgmClient.csproj
+++ b/StuMgmClient/StuMgmClient.csproj
@@ -91,6 +91,7 @@
     <Compile Include="StudentNavigation.Designer.cs">
       <DependentUpon>StudentNavigation.cs</DependentUpon>
     </Compile>
+    <Compile Include="Utility.cs" />
     <EmbeddedResource Include="SelectFrom.resx">
       <DependentUpon>SelectFrom.cs</DependentUpon>
     </EmbeddedResource>
diff --git a/StuMgmClient/Utility.cs b/StuMgmClient/Utility.cs
new file mode 100644
index 0000000..bcbae2b
--- /dev/null
+++ b/StuMgmClient/Utility.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace StuMgmClient
+{
+    class Utility
+    {
+        internal static bool BinSerialize<T>(T data, out byte[] buff)
+        {
+            try
+            {
+                MemoryStream ms = new MemoryStream();
+                BinaryFormatter iFormatter = new BinaryFormatter();
+                iFormatter.Serialize(ms, data);
+                buff = ms.GetBuffer();
+                return true;
+            }
+            catch (Exception e)
+            {
+                Debug.Print(e.Message);
+                buff = null;
+                return false;
+            }
+        }
+
+        internal static bool BinDeserialize(byte[] data, out object o)
+        {
+            try
+            {
+                MemoryStream ms = new MemoryStream(data);
+                BinaryFormatter iFormatter = new BinaryFormatter();
+                o = iFormatter.Deserialize(ms);
+                return true;
+            }
+            catch (Exception e)
+            {
+                Debug.Print(e.Message);
+                o = null;
+                return false;
+            }
+        }
+    }
+}
diff --git a/StuMgmLib/MyNameSpace/StuMgmSer.cs b/StuMgmLib/MyNameSpace/StuMgmSer.cs
index 95d8521..521a922 100644
--- a/StuMgmLib/MyNameSpace/StuMgmSer.cs
+++ b/StuMgmLib/MyNameSpace/StuMgmSer.cs
@@ -4,22 +4,33 @@ using System.Data;
 
 namespace StuMgmLib.MyNameSpace
 {
-    public class Info
+    [Serializable]
+    public class UserInfo
     {
-        [Serializable]
-        public class ClientSend
+        public string Account;
+        public string Password;
+        public UserInfo(string account,string password)
         {
-            public short account { get; set; }
-            public string password { get; set; }
-            public string [] sqlStr { get; set; }
+            Account = account;
+            Password = password;
         }
-        [Serializable]
+    }
+
+    [Serializable]
+    public class UserInfo
+    {
+        public short UserLevel;
+    }
+        
+    
+    
+    
+    [Serializable]
         public class ServerSend
         {
             public short permission { get; set; }
             public DataSet ds { get; set; }
         }
-    }
 
 
 }