public MultiChat(string userName, string userIp, int userPortrait, string[] group, string recvConversation, string mesFrom, string mesIp, string situation)
        {
            InitializeComponent();

            if (recvConversation != "")
            {
                RecvShow(recvConversation, mesFrom, group);
            }

            mesfrom  = mesFrom;
            state    = situation;
            username = userName;
            userip   = userIp;
            int len = group.Length;

            friendInfo[] friend1 = new friendInfo[10];
            StreamReader fr      = new StreamReader("friends.txt", Encoding.Default);
            String       line;
            int          count = 0;

            string[] lines = new string[5];
            while ((line = fr.ReadLine()) != null)
            {
                int tag = 0;
                lines = line.Split(' ');
                for (int k = 0; k < len; k++)           //判断是否属于被选中的朋友
                {
                    if (lines[0] == group[k])
                    {
                        tag = 1;
                        break;
                    }
                    else
                    {
                        tag = 0;
                    }
                }
                if (tag == 1)
                {
                    friend1[count].friendName     = lines[0];
                    friend1[count].friendPortrait = lines[3];
                    count++;
                }
            }
            fr.Close();

            IPAddress  server_ip     = IPAddress.Parse("166.111.140.14");
            IPEndPoint hostEP        = new IPEndPoint(server_ip, 8000);
            Socket     client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                client_socket.Connect(hostEP);
            }
            catch (Exception se)
            {
                MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                return;
            }
            string[] recv_info = new string[count];
            int      p         = 0;

            for (int i = 0; i < len; i++)
            {
                string search_num;
                search_num = friend1[i].friendName;
                string search_num2     = "q" + search_num;
                byte[] bytes_send_info = new byte[1024];
                bytes_send_info = Encoding.ASCII.GetBytes(search_num2);
                try
                {
                    client_socket.Send(bytes_send_info, bytes_send_info.Length, 0);
                }
                catch (Exception ce)
                {
                    MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                    return;
                }
                byte[] bytes_recv_info = new byte[1024];
                int    bytes           = 0;
                while (true)
                {
                    bytes = client_socket.Receive(bytes_recv_info, bytes_recv_info.Length, 0);
                    if (bytes <= 0)
                    {
                        break;
                    }
                    recv_info[i] += Encoding.ASCII.GetString(bytes_recv_info, 0, bytes);
                    break;
                }
                if (recv_info[i] != "n")
                {
                    Friend friend_list_1 = new Friend(userName, userIp, userPortrait, 1);
                    this.friends_list.Controls.Add(friend_list_1);
                    this.friends_list.Controls[p].BackColor = Color.Transparent;
                    string a = Application.StartupPath + "\\resources\\portrait" + friend1[i].friendPortrait + ".jpg";            //导入用户头像
                    friend_list_1.friendPortrait.Image     = Image.FromFile(@a);
                    friend_list_1.friendPortrait.SizeMode  = PictureBoxSizeMode.Zoom;
                    this.friends_list.Controls[p].Tag      = friend1[i].friendPortrait;
                    friend_list_1.friendListName.Text      = friend1[i].friendName;
                    friend_list_1.friendListIp.Text        = recv_info[i];
                    friend_list_1.friendListSituation.Text = "在线";
                    p++;
                }
                else
                {
                    MessageBox.Show("好友" + search_num + "不在线,无法添加");
                }
            }
            client_socket.Close();
        }
        /// <summary>
        /// 群主转发收到的消息
        /// </summary>
        /// <param name="rev_info"></param>
        /// <param name="mes_from"></param>
        /// <param name="mes_from_ip"></param>
        public void ownerTrans(string rev_info, string mes_from, string mes_from_ip)
        {
            string[] rev_infos = rev_info.Split('$');
            rev_info = rev_infos[2];

            if (state == "server")
            {
                friendInfo[] multichat_fri = new friendInfo[10];
                int          n             = this.friends_list.Controls.Count;
                int          index         = 0;
                //确认群聊有几人在线
                for (int i = 0; i < n; i++)
                {
                    Friend     temp           = (Friend)this.friends_list.Controls[i];
                    string     search_num2    = "q" + temp.friendListName.Text;
                    IPAddress  server_ip1     = IPAddress.Parse("166.111.140.14");
                    IPEndPoint hostEP1        = new IPEndPoint(server_ip1, 8000);
                    Socket     client_socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        client_socket1.Connect(hostEP1);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    byte[] bytes_send_info1 = new byte[1024];
                    bytes_send_info1 = Encoding.ASCII.GetBytes(search_num2);
                    try
                    {
                        client_socket1.Send(bytes_send_info1, bytes_send_info1.Length, 0);
                    }
                    catch (Exception ce)
                    {
                        MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    string temp_recv       = "";
                    byte[] bytes_recv_info = new byte[1024];
                    int    bytes           = 0;
                    while (true)
                    {
                        bytes = client_socket1.Receive(bytes_recv_info, bytes_recv_info.Length, 0);
                        if (bytes <= 0)
                        {
                            break;
                        }
                        temp_recv += Encoding.ASCII.GetString(bytes_recv_info, 0, bytes);
                        break;
                    }
                    client_socket1.Close();
                    if (temp_recv == "n")
                    {
                        MessageBox.Show(temp.friendListName.Text + "已经离线,将其移出群聊!");
                        this.friends_list.Controls.RemoveAt(i);
                    }
                    else
                    {
                        if (temp.friendListName.Text != mes_from)
                        {
                            multichat_fri[index].friendName = temp.friendListName.Text;
                            multichat_fri[index].friendIp   = temp.friendListIp.Text;
                            index++;
                        }
                    }
                }
                n = index;
                string multi_fri_now = "";
                for (int i = 0; i < n; i++)
                {
                    multi_fri_now = multi_fri_now + " " + multichat_fri[i].friendName;
                }

                string user_send = "START_MHAT" + mes_from + mes_from_ip + "$" + multi_fri_now + "$" + rev_info;

                for (int i = 0; i < n; i++)
                {
                    IPAddress  server_ip     = IPAddress.Parse(multichat_fri[i].friendIp);
                    IPEndPoint hostEP        = new IPEndPoint(server_ip, send_port);
                    Socket     client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        //尝试连接
                        client_socket.Connect(hostEP);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    byte[] bytes_send_info = new byte[1024];
                    bytes_send_info = Encoding.Unicode.GetBytes(user_send);
                    try
                    {
                        client_socket.Send(bytes_send_info, bytes_send_info.Length, 0);    //发送消息
                    }
                    catch (Exception ce)
                    {
                        MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                }
            }
        }
        private void button_send_Click(object sender, EventArgs e)
        {
            if (state == "server")
            {
                friendInfo[] multichat_fri = new friendInfo[10];
                int          n             = this.friends_list.Controls.Count;
                int          index         = 0;
                //确认群聊有几人在线
                for (int i = 0; i < n; i++)
                {
                    Friend     temp           = (Friend)this.friends_list.Controls[i];
                    string     search_num2    = "q" + temp.friendListName.Text;
                    IPAddress  server_ip1     = IPAddress.Parse("166.111.140.14");
                    IPEndPoint hostEP1        = new IPEndPoint(server_ip1, 8000);
                    Socket     client_socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try                         //尝试连接
                    {
                        client_socket1.Connect(hostEP1);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    byte[] bytes_send_info1 = new byte[1024];
                    bytes_send_info1 = Encoding.ASCII.GetBytes(search_num2);
                    try                         //向主机发送请求
                    {
                        client_socket1.Send(bytes_send_info1, bytes_send_info1.Length, 0);
                    }
                    catch (Exception ce)
                    {
                        MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    string temp_recv       = "";
                    byte[] bytes_recv_info = new byte[1024];
                    int    bytes           = 0;
                    while (true)
                    {
                        bytes = client_socket1.Receive(bytes_recv_info, bytes_recv_info.Length, 0);
                        if (bytes <= 0)
                        {
                            break;
                        }
                        temp_recv += Encoding.ASCII.GetString(bytes_recv_info, 0, bytes);
                        break;
                    }
                    client_socket1.Close();
                    if (temp_recv == "n")
                    {
                        MessageBox.Show(temp.friendListName.Text + "不在线上!");
                        this.friends_list.Controls.RemoveAt(i);
                    }
                    else
                    {
                        multichat_fri[index].friendName = temp.friendListName.Text;
                        multichat_fri[index].friendIp   = temp.friendListIp.Text;
                        index++;
                    }
                }
                string multi_fri_now = "";
                n = index;
                for (int i = 0; i < n; i++)
                {
                    multi_fri_now = multi_fri_now + " " + multichat_fri[i].friendName;
                }

                string user_send = "START_MHAT" + username + userip + "$" + multi_fri_now + "$" + user_text.Text;

                n = this.friends_list.Controls.Count;
                for (int i = 0; i < n; i++)
                {
                    IPAddress  server_ip     = IPAddress.Parse(multichat_fri[i].friendIp);
                    IPEndPoint hostEP        = new IPEndPoint(server_ip, send_port);
                    Socket     client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        client_socket.Connect(hostEP);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    byte[] bytes_send_info = new byte[1024];
                    bytes_send_info = Encoding.Unicode.GetBytes(user_send);
                    try
                    {
                        client_socket.Send(bytes_send_info, bytes_send_info.Length, 0);
                    }
                    catch (Exception ce)
                    {
                        MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                }
                this.chat_text.Select(chat_text.TextLength, 0);
                this.chat_text.SelectionColor = Color.Green;
                this.chat_text.AppendText(DateTime.Now.ToLocalTime().ToString() + "  " + username + "(我)  " + "\r\n");
                this.chat_text.Select(chat_text.TextLength, 0);
                this.chat_text.SelectionColor = Color.Green;
                this.chat_text.AppendText(user_text.Text + "\r\n\r\n");
                this.chat_text.SelectionStart = chat_text.TextLength;
                this.chat_text.ScrollToCaret();
                this.Refresh();
                user_text.Text = "";
            }
            else if (state == "client")
            {
                string user_send = "START_MHAT" + username + userip + "$" + " " + "$" + user_text.Text;

                string     search_num2    = "q" + mesfrom;
                IPAddress  server_ip1     = IPAddress.Parse("166.111.140.14");
                IPEndPoint hostEP1        = new IPEndPoint(server_ip1, 8000);
                Socket     client_socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    client_socket1.Connect(hostEP1);
                }
                catch (Exception se)
                {
                    MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                    return;
                }
                byte[] bytes_send_info1 = new byte[1024];
                bytes_send_info1 = Encoding.ASCII.GetBytes(search_num2);
                try
                {
                    client_socket1.Send(bytes_send_info1, bytes_send_info1.Length, 0);
                }
                catch (Exception ce)
                {
                    MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                    return;
                }
                byte[] bytes_recv_info = new byte[1024];
                string temp_rcv        = "";
                int    bytes           = 0;
                while (true)
                {
                    bytes = client_socket1.Receive(bytes_recv_info, bytes_recv_info.Length, 0);
                    if (bytes <= 0)
                    {
                        break;
                    }
                    temp_rcv += Encoding.ASCII.GetString(bytes_recv_info, 0, bytes);
                    break;
                }
                client_socket1.Close();

                if (temp_rcv == "n")
                {
                    MessageBox.Show("对不起,对方已下线,无法发送!");
                }
                else
                {
                    IPAddress  server_ip     = IPAddress.Parse(temp_rcv);
                    IPEndPoint hostEP        = new IPEndPoint(server_ip, send_port);
                    Socket     client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        client_socket.Connect(hostEP);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    byte[] bytes_send_info = new byte[1024];
                    bytes_send_info = Encoding.Unicode.GetBytes(user_send);
                    try
                    {
                        client_socket.Send(bytes_send_info, bytes_send_info.Length, 0);    //发送消息
                    }
                    catch (Exception ce)
                    {
                        MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                        return;
                    }
                    this.chat_text.Select(chat_text.TextLength, 0);
                    this.chat_text.SelectionColor = Color.Green;
                    this.chat_text.AppendText(DateTime.Now.ToLocalTime().ToString() + "  " + username + "(我)  " + "\r\n");   //将自己发送的消息显示
                    this.chat_text.Select(chat_text.TextLength, 0);
                    this.chat_text.SelectionColor = Color.Green;
                    this.chat_text.AppendText(user_text.Text + "\r\n\r\n");
                    this.chat_text.SelectionStart = chat_text.TextLength;
                    this.chat_text.ScrollToCaret();
                    this.Refresh();
                    user_text.Text = "";
                }
            }
        }
        /// <summary>
        /// 构造聊天界面信息
        /// </summary>
        /// <param name="title"></param>
        /// <param name="name"></param>
        /// <param name="ip"></param>
        /// <param name="portrait"></param>
        /// <param name="recvConversation"></param>
        public Chat(string title, string name, string ip, int portrait, string recvConversation)
        {
            InitializeComponent();

            if (recvConversation != "")
            {
                ShowMessage(recvConversation);                              //显示朋友发来的消息
            }
            this.Text = "和" + title + "的聊天";    fri = title;
            friendInfo friendC = new friendInfo();
            string     a1      = Application.StartupPath + "\\resources\\portrait" + portrait + ".jpg";

            this.user_name.Text = name;
            this.user_ip.Text   = ip;

            //显示朋友用户名、IP、头像等信息
            friendC.friendName = title;
            StreamReader stream = new StreamReader("friends.txt", Encoding.Default);

            string[] oriLine = new string[5];
            String   splitedLine;

            while ((splitedLine = stream.ReadLine()) != null)
            {
                oriLine = splitedLine.Split(' ');
                if (oriLine[0] == friendC.friendName)
                {
                    friendC.friendIp       = oriLine[1];
                    friendC.friendPortrait = oriLine[3];
                    if (oriLine[2] == "True")
                    {
                        friendC.friendOnline = true;
                    }
                    else
                    {
                        friendC.friendOnline = false;
                    }
                }
            }
            stream.Close();



            string     searchNum    = "q" + title;
            IPAddress  serverIp     = IPAddress.Parse("166.111.140.14");
            IPEndPoint hostEP       = new IPEndPoint(serverIp, 8000);
            Socket     clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                clientSocket.Connect(hostEP);

                byte[] bytesSendInfo = new byte[1024];
                bytesSendInfo = Encoding.ASCII.GetBytes(searchNum);
                try
                {
                    clientSocket.Send(bytesSendInfo, bytesSendInfo.Length, 0);
                }
                catch (Exception ce)
                {
                    MessageBox.Show("发送错误:" + ce.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                    return;
                }
                byte[] bytesRecvInfo = new byte[1024];
                int    bytes         = 0;
                while (true)
                {
                    bytes = clientSocket.Receive(bytesRecvInfo, bytesRecvInfo.Length, 0);
                    if (bytes <= 0)
                    {
                        break;
                    }
                    tempRcv += Encoding.ASCII.GetString(bytesRecvInfo, 0, bytes);
                    break;
                }
                clientSocket.Close();
                if (tempRcv == "n")
                {
                    MessageBox.Show("对不起,对方已下线!");
                }
                else
                {
                    friendIpLabel.Text   = tempRcv;
                    friendNameLabel.Text = friendC.friendName;
                    string a = Application.StartupPath + "\\resources\\portrait" + friendC.friendPortrait + ".jpg";            //导入用户头像
                    portraitBox.Image    = Image.FromFile(@a);
                    portraitBox.SizeMode = PictureBoxSizeMode.Zoom;
                    this.Refresh();
                }
            }
            catch (Exception se)
            {
                MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                return;
            }
        }