由于MESSAGE.CS与UMESSAGE.CS类似,在此不再详述。 内容来自论文无忧网 www.paper51.com 服务器和客户端都可以通过相同的代码对UMESSAGE赋值,再通过XmlSerializer方法进行将UMESSAGE序列化为XML文档,最后将XML文档转化为网络流进行传输。代码如下: paper51.com #region 将登录信息转为UMessage 内容来自论文无忧网 www.paper51.com private void Traslator() 内容来自www.paper51.com
{ 内容来自论文无忧网 www.paper51.com
内容来自www.paper51.com _message.Accounts=this.TextBox1.Text; copyright paper51.com _message.Nickname=""; http://www.paper51.com _message.Password=this.TextBox2.Text; copyright paper51.com _message.Email=""; paper51.com
_message.Info=1; http://www.paper51.com _message.Fri=null; 内容来自论文无忧网 www.paper51.com } 内容来自www.paper51.com #endregion 内容来自论文无忧网 www.paper51.com 4.1.2 数据结构FriendStruct paper51.com 服务器如果保存和传递用户的好友信息是难点之一。数据库的设计和信息的传递辨别都是比较难实现的。 内容来自论文无忧网 www.paper51.com 在数据库方面,每个用户拥有各自的好友分组信息(UserFav),分组中间使用“,”分隔,在TCP_FriendInfo表中则分别保存了用户ID和好友ID,使用一个INT字段保存分组信息。数据库以用户ID为标准对好友ID和分组信息进行内连接查询,就可以得到基本的好友信息了。代码如下: 内容来自论文无忧网 www.paper51.com select * from TCP_UserInfojoin TCP_FriendInfo on TCP_FriendInfo.UserID='" + uid + "' andTCP_UserInfo.UserID=TCP_FriendInfo.FriendID 内容来自论文无忧网 www.paper51.com
在好友信息的传输方面,首先定义一个FriendStruct数据结构(当然也可以用枚举完成)如下: 内容来自论文无忧网 www.paper51.com using System; http://www.paper51.com using System.Collections.Generic; 内容来自www.paper51.com usingSystem.Text; copyright paper51.com namespace TCP paper51.com
{ http://www.paper51.com public class FriendStruct 内容来自论文无忧网 www.paper51.com { 内容来自论文无忧网 www.paper51.com
public struct FileInfo http://www.paper51.com { 内容来自www.paper51.com public int filere;//接收和拒绝信息,1为接收,2为拒绝,3为取消 paper51.com public string filename; 内容来自www.paper51.com
publiclong filelength; http://www.paper51.com } http://www.paper51.com } paper51.com public struct Friend paper51.com
{ paper51.com public string account; 内容来自论文无忧网 www.paper51.com public string nickname; paper51.com public string IP; 内容来自www.paper51.com public string status; 内容来自www.paper51.com
public string fg;//好友分组 http://www.paper51.com } paper51.com } 内容来自www.paper51.com 在MESSAGE.CS或者UMESSAGE.CS中,我们则定义了FriendStruct的数组。在C#中使用DATAREADER语句可以逐句读取数据库查询的结果,再依次将结果赋值FriendStruct数组元素,就得到了便于发送和读取的存放好友信息的数组。赋值代码如下: copyright paper51.com while (getf.Read()) //getf即是以上的数据库查询的datareader语句 copyright paper51.com { 内容来自论文无忧网 www.paper51.com ff[i].account=getf["UserAccount"].ToString(); 内容来自www.paper51.com ff[i].IP = getf["UserIP"].ToString(); 内容来自论文无忧网 www.paper51.com ff[i].nickname = getf["UserNickname"].ToString(); 内容来自论文无忧网 www.paper51.com ff[i].status = getf["UserOnline"].ToString(); 内容来自www.paper51.com ff[i].fg = getf["FriendGroup"].ToString(); paper51.com i++; http://www.paper51.com
} copyright paper51.com getf.Close(); http://www.paper51.com
4.2 数据库连接类 copyright paper51.com 实现一个快捷简单的数据库连接的相关代码是非常有必要的。实现的途径也多种多样,鉴于安全性和复杂性的需求不同,实现方法有简有繁。本设计使用了一个简单的类(UserData.CS)实现了简单快捷的数据库连接和读取。主要代码如下: copyright paper51.com public static SqlConnection connStr = newSqlConnection("Server=D96B85DD938A465.;uid=sa;pwd=change;database=TCPDB"); copyright paper51.com publicstatic SqlDataReader SqlReader(string sql, SqlConnection connstr) 内容来自www.paper51.com { 内容来自www.paper51.com SqlDataReader sqldr = null; copyright paper51.com SqlCommand cmd = new SqlCommand(sql, connstr); copyright paper51.com if (cmd.Connection.State.ToString() == "Closed")cmd.Connection.Open(); paper51.com
try 内容来自www.paper51.com
{ 内容来自www.paper51.com
sqldr = cmd.ExecuteReader(); 内容来自论文无忧网 www.paper51.com } http://www.paper51.com catch (Exception e) 内容来自www.paper51.com { 内容来自论文无忧网 www.paper51.com if (e != null) sqldr = null; http://www.paper51.com } 内容来自www.paper51.com return sqldr; http://www.paper51.com
} http://www.paper51.com
//数据库操作连接 paper51.com public static string SqlCmd(string sql, SqlConnection connstr) 内容来自www.paper51.com { 内容来自www.paper51.com string errorstr = null; 内容来自论文无忧网 www.paper51.com
SqlCommand sqlcmd = new SqlCommand(sql, connstr); http://www.paper51.com if (sqlcmd.Connection.State.ToString() == "Open") sqlcmd.Connection.Close(); copyright paper51.com
sqlcmd.Connection.Open(); 内容来自论文无忧网 www.paper51.com
try paper51.com { copyright paper51.com sqlcmd.ExecuteNonQuery(); 内容来自www.paper51.com } 内容来自论文无忧网 www.paper51.com catch (Exception e) paper51.com { paper51.com
if (e != null) errorstr = e.ToString(); copyright paper51.com } copyright paper51.com sqlcmd.Connection.Close(); paper51.com return errorstr; 内容来自论文无忧网 www.paper51.com
} paper51.com 在UserData.CS的基础上,主程序可以更方便地实现数据库连接操作,对数据库进行读写和更新,在此不再详述。 http://www.paper51.com
|