⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_server.cs

📁 01_家庭视频监控系统 02_企业短信群发系统 03_企业电话客服系统 04_卡拉OK点歌系统 05_企业QQ系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QQClass;
using System.Data.SqlClient;
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace MyQQServer
{
    public partial class F_Server : Form
    {
        public F_Server()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //QQClass.Controls.ClassMsg msg = new QQClass.Controls.ClassMsg(0, LV_SysUser.Items[0].Text, null);
            //SendMsgToAll(msg);//发送消息给所有此用户的联系人,告之用户掉线
        }

        private void SendMsgToAll(ClassMsg msg)//发送消息给所有用户
        {
            try
            {
                foreach (System.Windows.Forms.ListViewItem item in this.LV_SysUser.Items)
                {
                    System.Net.IPAddress ip = System.Net.IPAddress.Parse(item.SubItems[1].Text);
                    int port = Convert.ToInt32(item.SubItems[2].Text);
                    System.IO.MemoryStream stream = new ClassSerializers().SerializeBinary(msg);
                    QQClass.UDPSocket udp = new QQClass.UDPSocket();
                    udp.Send(ip, port, stream.ToArray());
                }
            }
            catch{ }

        }

        private void SendMsgToOne(System.Net.IPAddress ip, int port, ClassMsg msg)//发送消息给一个用户
        {
            try
            {
                System.IO.MemoryStream stream = new ClassSerializers().SerializeBinary(msg);
                QQClass.UDPSocket udp = new QQClass.UDPSocket();
                udp.Send(ip, port, stream.ToArray());
            }
            catch { }

        }

        private void Tool_Open(object sender, EventArgs e)
        {
            if (((ToolStripMenuItem)sender).Text == "开始服务")
            {
                ((ToolStripMenuItem)sender).Text = "结束服务";
                udpSocket1.Active = true;
            }
            else
            {
                ((ToolStripMenuItem)sender).Text = "开始服务";
                udpSocket1.Active = false;
            }
        }

        private void Server(bool IsServer)//开始或停止服务
        {

        }

        private void sockUDP1_DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port)
        {
            DataArrivaldelegate outdelegate = new DataArrivaldelegate(DataArrival);
            this.BeginInvoke(outdelegate, new object[] { Data, Ip, Port }); 
        }
        private delegate void DataArrivaldelegate(byte[] Data, System.Net.IPAddress Ip, int Port);

        private void DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port) //当有数据到达后的处理进程
        {
            try
            {
                ClassMsg msg = new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as ClassMsg;

                switch (msg.sendKind)
                {
                    case SendKind.SendCommand://命令
                        {
                            switch (msg.msgCommand)
                            {
                                case MsgCommand.Registering://注册用户
                                    RegisterUser(msg, Ip, Port);
                                    break;
                                case MsgCommand.Logining://登录用户
                                    UserLogin(msg, Ip, Port, 1);
                                    break;
                                case MsgCommand.UserList://用户列表
                                    SendUserList(msg, Ip, Port);
                                    break;
                                case MsgCommand.SendToOne://发送消息给单用户
                                    SendUserMsg(msg, Ip, Port);
                                    break;
                                case MsgCommand.Close://下线
                                    UpdateUserState(msg, Ip, Port);
                                    break;
                            }
                            break;
                        }
                    case SendKind.SendMsg://消息
                        {
                            switch (msg.msgCommand)
                            {
                                case MsgCommand.SendToOne://发送消息给单用户
                                    SendUserMsg(msg, Ip, Port);
                                    break;
                            }
                            break;
                        }
                    case SendKind.SendFile://文件
                        {
                            break;
                        }
                }

            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="Ip"></param>
        /// <param name="Port"></param>
        /// <param name="State"></param>
        private void UserLogin(ClassMsg msg, System.Net.IPAddress Ip, int Port, int State)
        {
            RegisterMsg registermsg = (RegisterMsg)new ClassSerializers().DeSerializeBinary(new MemoryStream(msg.Data));

            ClassOptionData OptionData = new ClassOptionData();//创建并引用ClassOptionData
            MsgCommand msgState = msg.msgCommand;   //获取接收消息的命令
            String UserName = registermsg.UserName;//登录用户名称
            String PassWord = registermsg.PassWord;//用户密码
            String vIP = Ip.ToString();//用户IP地址

            SqlDataReader DataReader = OptionData.ExSQLReDr("Select * From tb_CurreneyUser Where Name = "+ "'"+UserName+"'"+" and PassWord = "
                            +"'"+PassWord+"'");//在数据库中通过用户名和密码进行查找

            DataReader.Read();//读取查找到的记录
            string ID = Convert.ToString(DataReader.GetInt32(0));//获取第一条记录中的ID字段值
            if (DataReader.HasRows)//当DataReader中有记录信息时
            {
                //修改当前记录的标识为上线状态
                OptionData.ExSQL("Update tb_CurreneyUser Set Sign = " + Convert.ToString((int)(MsgCommand.Logined)) + ",IP = " + "'" + vIP + "',Port = " + "'" + Port.ToString() + "'" + " Where ID = " + ID);
                msg.msgCommand =  MsgCommand.Logined;//设置为上线命令
                msg.SID = ID;//用户ID值
                SendMsgToOne(Ip, Port, msg);//将消息返回给发送用户
                UpdateUserState(msg,Ip,Port);//更新用户在线状态
            }
            OptionData.Dispose();
            UpdateUser();//更新用户列表
            
        }

        /// <summary>
        /// 用户注册
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="Ip"></param>
        /// <param name="Port"></param>
        private void RegisterUser(ClassMsg msg, System.Net.IPAddress Ip, int Port)
        {
            msg = InsertUser(msg,Ip,Port);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -