仿QQ聊天软件--基于局域网TCP蓝精灵聊天软件的实现(4)

2018-12-19 22:47

SendData(frd, msg); break;

caseMsgCommand.Registering: Data RegistSQL = newData();

if (RegistSQL.RegistExSQL(msg) == 1) {

msg.msgCommand = MsgCommand.Registered; }

SendData(frd, msg); break;

caseMsgCommand.Mymsggeting: Data MymsgSQL = newData(); //获取并发送用户信息

ClassMessage msgG = MymsgSQL.GetmymsgExSQL(msg); msgG.msgCommand = MsgCommand.Mymsggot; SendData(frd, msgG); break;

caseMsgCommand.FriendList: Data FriListSQL = newData(); int count = 0; SqlDataReader sdr;

FriendMsg frimsg = newFriendMsg();

string[] FriendID = FriListSQL.GetfriendsExSQL(msg, out count); for (int i = 0; i < count; i++) {

sdr = FriListSQL.GetfriMsgExSQL(FriendID[i], 0); sdr.Read(); if (sdr[0] != DBNull.Value)

frimsg.Face = (byte[])sdr[0]; else frimsg.Face = null;

frimsg.UserName = sdr[1].ToString(); //发送好友信息给客户端

msg.Data = newClassSerializers().SerializeBinary(frimsg).ToArray(); msg.msgCommand = MsgCommand.FriendList; //获取验证消息

SendData(frd, msg); }

//通知客户端好友信息已查询完

msg = newClassMessage(); SendData(frd, msg); break;

caseMsgCommand.Frimsggeting: Data FriMsgSQL = newData(); //获取好友信息并发送

13

SqlDataReader sdr1 = FriMsgSQL.GetfriMsgExSQL(msg.UserName, 1); if(sdr1.Read()) {

if (sdr1[0] != DBNull.Value)

msg.Face = (byte[])sdr1[0]; else msg.Face = null;

msg.msgCommand = MsgCommand.Frimsggot; }

SendData(frd, msg); break;

caseMsgCommand.UpdateState: Data AddFriSQl = newData();

int state = AddFriSQl.AddFrinedExSQL(msg); if (state == 1) {

msg.msgCommand = MsgCommand.UpdateState; } elseif (state == 2) {

msg.msgCommand = MsgCommand.None; } else

{

msg.msgCommand = MsgCommand.Close; }

SendData(frd, msg); break;

caseMsgCommand.FriendDeleting: Data DeleteSQL = newData();

if (DeleteSQL.DeleteExSQL(msg) == 1) {

msg.msgCommand = MsgCommand.FriendDeleted; }

SendData(frd, msg); break;

caseMsgCommand.SendToOne:

SendDataTo(frd, msg); break; default:

MessageBox.Show(\); break; }

14

}

//发送反馈消息给当前客户端

privatevoid SendData(MyFriend frd, ClassMessage msg) { try {

byte[] data = newClassSerializers().SerializeBinary(msg).ToArray(); AsyncCallback callback = newAsyncCallback(SendCallback); //发送响应消息给客户端

frd.socket.BeginSend(data, 0, data.Length, SocketFlags.None, callback, frd); string data1 = string.Format(\:{0}\, frd.socket.RemoteEndPoint.ToString()); lstBox1.Invoke(AppendString, data1); } catch {

lstBoxStatu.Invoke(Removefriend, frd); } }

//发送聊天信息给在线客户端

privatevoid SendDataTo(MyFriend frd, ClassMessage msg) { try {

//对每一个侦听的客户端端口信息进行发送操作 for (int i = 0; i < ClientNum; i++) {

if (ClientSocket[i] != null&& ClientSocket[i] != frd.socket) { //回发数据到客户端

ClientSocket[i].Send(newClassSerializers().SerializeBinary(msg).ToArray()); } } }

catch(Exception ex) {

MessageBox.Show(ex.Message); } }

//点击结束按钮的响应函数

privatevoid btnStop_Click(object sender, EventArgs e) {

if (!IsStart) return; listener.Stop();

15

IsStart = false;

lstBox1.Invoke(AppendString, \已经结束了服务器的侦听!\); btnStop.Enabled = true; btnStart.Enabled = true; }

b.数据库操作控件(Data控件):

publicint LoginExSQL(LoginMsg msg, string remoteEndPoint) { try {

SqlConnection cnn = newSqlConnection(ConStr); cnn.Open();

//执行登录信息查询操作,验证登录信息并返回信息以允许/拒绝登录 if (cnn.State == ConnectionState.Open) {

SqlCommand cmd = newSqlCommand(\ + msg.UserName + \, cnn);

SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read();

if (string.Compare(sdr[0].ToString(), msg.PassWord) == 0) return 1; }

//关闭数据库并清理所占用资源 cnn.Dispose(); return 0; }

catch (Exception ex) {

MessageBox.Show(ex.Message); return 0; } }

publicint RegistExSQL(ClassMessage msg) { try {

SqlConnection cnn = newSqlConnection(ConStr); cnn.Open();

//执行注册操作,验证注册信息并返回注册结果 if (cnn.State == ConnectionState.Open) {

SqlCommand cmd = newSqlCommand(\

\+msg.UserName+\+msg.PassWord+\+msg.Sex+\+msg.Age, cnn);

16

//执行有关插入存储过程,若插入成功(受影响行数为1),返回1 if (cmd.ExecuteNonQuery() == 1) return 1; }

//关闭数据库并清理所占用资源 cnn.Dispose(); return 0; }

catch (Exception ex) {

MessageBox.Show(ex.Message); return 0; } }

publicClassMessage GetmymsgExSQL(ClassMessage msg) { try {

SqlConnection cnn = newSqlConnection(ConStr); cnn.Open();

//执行用户信息查询操作,返回用户信息 if (cnn.State == ConnectionState.Open) {

SqlCommand cmd = newSqlCommand(\UserName='\+msg.UserName+\, cnn); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); if (sdr[0] != DBNull.Value)

msg.Face = (byte[])sdr[0]; else msg.Face = null;

msg.Sign = (int)sdr[1]; return msg; }

//关闭数据库并清理所占用资源 cnn.Dispose(); returnnull; }

catch (Exception ex) {

MessageBox.Show(ex.Message); returnnull; } }

publicstring[] GetfriendsExSQL(ClassMessage msg, outint count)

17


仿QQ聊天软件--基于局域网TCP蓝精灵聊天软件的实现(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:立即行动起来 努力开创我镇老龄工作新局面

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: