客户端登陆界面如下:
客户端代码:
Program.cs 中
//在全局处理函数中忽略相关消息 不添加日志
NetworkComms.IgnoreUnknownPacketTypes = true;
ConnectionInfo connInfo = new ConnectionInfo("127.0.0.1", 2539);
Connection newTcpConnection = TCPConnection.GetConnection(connInfo);
//连接服务器完成******************************************
//初始化主窗口
MainForm mainForm = new MainForm();
//显示登录窗口
frmLogin loginForm = new frmLogin(applicationName, mainForm, newTcpConnection);
//根据登陆窗口返回的信息,打开主窗口,或者是注册窗口
if (loginForm.ShowDialog() == DialogResult.OK)
{
if(loginForm.Register == 5)
{
Application.Run(mainForm);
}
else
{
Register newRegister = new Register();
newRegister.Initialize(newTcpConnection);
Application.Run(newRegister);
}
}
登陆窗口中的登陆按钮相关代码
private void btnLogin_Click(object sender, EventArgs e)
{
// 如果通过输入验证
if (UserInputCheck())
{
try
{
// 保存登录身份是否合法验证结果
bool isPass = false;
Users theUser = new Users();
theUser.UserID = txtLoginName.Text.Trim();
theUser.Password = txtUserPwd.Text.Trim();
//发送当前登陆用户的信息给服务器,并从服务器获取返回的信息
LoginResult loginResult = newTcpConnection.SendReceiveObject<LoginResult>("Login", "LoginResult", 5000, theUser);
if (loginResult.Message=="登录成功")
{
//记录用户名
netConfiguration.UserID = theUser.UserID;
netConfiguration.Save();
//初始化主窗口中的属性
theUser.Department = loginResult.Department;
theUser.Name = loginResult.UserName;
mainForm.InitiaLize(this.newTcpConnection, theUser);
// 标识验证通过
isPass = true;
Register = 5;
this.DialogResult = DialogResult.OK;
}
// 如果未通过验证
if (!isPass)
{
MessageBox.Show(loginResult.Message);
}
}
catch (Exception ex)
{
ShowLoginLostToolTip(ex);
}
}
}
User.cs实体类代码:
[ProtoContract]
public class Users
{
#region Constructors
public Users()
{ }
#endregion
#region Private Properties
private int id = -1;
private string userID = string.Empty;
private string name = string.Empty;
private string password = string.Empty;
private string declaring = string.Empty;
private int status = -1;
private bool isMale = false;
private int userLevel = -1;
private bool enabled = false;
private DateTime registerTime = DateTime.UtcNow;
private DateTime lastLoginTime = DateTime.UtcNow;
private int depID = -1;
private string department = string.Empty;
#endregion
#region Public Properties
[ProtoMember(1)]
public int Id
{
get { return id; }
set { id = value; }
}
[ProtoMember(2)]
public string UserID
{
get { return userID; }
set { userID = value; }
}
[ProtoMember(3)]
public string Name
{
get { return name; }
set { name = value; }
}
[ProtoMember(4)]
public string Password
{
get { return password; }
set { password = value; }
}
[ProtoMember(5)]
public string Declaring
{
get { return declaring; }
set { declaring = value; }
}
[ProtoMember(6)]
public int Status
{
get { return status; }
set { status = value; }
}
[ProtoMember(7)]
public bool IsMale
{
get { return isMale; }
set { isMale = value; }
}
[ProtoMember(8)]
public int UserLevel
{
get { return userLevel; }
set { userLevel = value; }
}
[ProtoMember(9)]
public bool Enabled
{
get { return enabled; }
set { enabled = value; }
}
[ProtoMember(10)]
public DateTime RegisterTime
{
get { return registerTime; }
set { registerTime = value; }
}
[ProtoMember(11)]
public DateTime LastLoginTime
{
get { return lastLoginTime; }
set { lastLoginTime = value; }
}
[ProtoMember(12)]
public int DepID
{
get { return depID; }
set { depID = value; }
}
[ProtoMember(13)]
public string Department
{
get { return department; }
set { department = value; }
}
#endregion
}
服务器端程序的处理代码:
在服务器端构造函数中声明针对登陆操作的处理器:
//用户验证处理器
NetworkComms.AppendGlobalIncomingPacketHandler<Users>("Login", HandleUserVerify);
//用户登录验证
private void HandleUserVerify(PacketHeader header, Connection connection, Users theUser)
{
LoginResult loginResult = new LoginResult();
Users currentUser = DoUsers.GetUserByID(theUser.UserID);
string message;
if (currentUser != null)
{
if (currentUser.Password == theUser.Password)
message = "登录成功";
else if (currentUser.Password == "msdcmsdcmsdcmsdcmsdc")
message = "用户未开通,请与管理员联系";
else if (currentUser.Password != theUser.Password)
message = "用户名密码不匹配";
else
message = "登录不成功,原因未知";
}
else
{
message = "用户不存在";
}
loginResult.Message = message;
loginResult.Department = currentUser.Department;
loginResult.UserName = currentUser.Name;
connection.SendObject("LoginResult", loginResult);
}
[ProtoContract]
public class LoginResult
{
[ProtoMember(1)]
public string Message { get; set; }
[ProtoMember(2)]
public string Department { get; set; }
[ProtoMember(3)]
public string UserName { get; set; }
public LoginResult() { }
public LoginResult(string message)
{
this.Message = message;
}
public LoginResult(string message,string department)
{
this.Message = message;
this.Department = department;
}
public LoginResult(string message, string department,string userName)
{
this.Message = message;
this.Department = department;
this.UserName = userName;
}
}
DoUsers类中相关方法
public static Users GetUserByID(string userID)
{
using (IDataReader reader = DBUsers.GetOneByUserID(userID))
{
Users theUser = PopulateFromReader(reader);
return theUser;
}
}
private static Users PopulateFromReader(IDataReader reader)
{
Users Users = new Users();
if (reader.Read())
{
Users.Id = Convert.ToInt32(reader["Id"]);
Users.UserID = reader["UserID"].ToString();
Users.Name = reader["Name"].ToString();
Users.Password = reader["Password"].ToString();
Users.Declaring = reader["Declaring"].ToString();
Users.Status = Convert.ToInt32(reader["Status"]);
Users.IsMale = Convert.ToBoolean(reader["IsMale"]);
Users.UserLevel = Convert.ToInt32(reader["UserLevel"]);
Users.Enabled = Convert.ToBoolean(reader["Enabled"]);
Users.RegisterTime = Convert.ToDateTime(reader["RegisterTime"]);
Users.LastLoginTime = Convert.ToDateTime(reader["LastLoginTime"]);
Users.DepID = Convert.ToInt32(reader["DepID"]);
Users.Department = reader["Department"].ToString();
}
return Users;
}
DBUsers类中相关方法
//根据UserID获取记录
public static IDataReader GetOneByUserID(string userID)
{
SqlParameterHelper sph = new SqlParameterHelper(GetReadConnectionString(), "Users_SelectOneByUserID", 1);
sph.DefineSqlParameter("@UserID", SqlDbType.NVarChar, 200, ParameterDirection.Input, userID);
return sph.ExecuteReader();
}
数据库中相关的存储过程
CREATE PROCEDURE [dbo].Users_SelectOneByUserID
@UserID nvarchar(100)
AS
SELECT
[Id],
[UserID],
[Name],
[Password],
[Declaring],
[Status],
[IsMale],
[UserLevel],
[Enabled],
[RegisterTime],
[LastLoginTime],
[DepID],
[Department]
FROM
[dbo].[Users]
WHERE
UserID=@UserID
【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)
【开源下载】基于winform的xml菜单编辑器(c#源码)