private void button_register_Click(object sender, RoutedEventArgs e)
        {
            TcpClient     tcpClient     = null;
            NetworkStream networkStream = null;

            try {
                string[] ip = textBox_ip.Text.Split(':');
                tcpClient = new TcpClient();
                IPAddress ServerIP = IPAddress.Parse(ip[0]);
                tcpClient.Connect(ServerIP, int.Parse(ip[1]));                 //建立与服务器的连接
                networkStream = tcpClient.GetStream();
                if (networkStream.CanWrite)
                {
                    IMClassLibrary.LoginDataPackage loginDataPackage = new IMClassLibrary.LoginDataPackage("127.0.0.1:" + MyPort.ToString(), "Server_Reg", textBox_id.Text, sha256(passwordBox.Password)); //初始化登录数据包
                    byte[] sendBytes = loginDataPackage.DataPackageToBytes();                                                                                                                              //注册数据包转化为字节数组
                    networkStream.Write(sendBytes, 0, sendBytes.Length);
                }
            }
            catch {
                MessageBox.Show("无法连接到服务器!");
                return;
            }
            finally {
                if (networkStream != null)
                {
                    networkStream.Close();
                }
                tcpClient.Close();
            }
            string msg = ListenThreadMethod();

            if (msg == "注册成功")
            {
                MessageBox.Show("注册成功!");
            }
            else
            {
                MessageBox.Show("注册失败!");
            }
        }
        private void button_login_Click(object sender, RoutedEventArgs e)
        {
            TcpClient tcpClient;
            IPAddress ServerIP;
            string    msg = string.Empty;

            try {
                string[] ip = textBox_ip.Text.Split(':');
                tcpClient = new TcpClient();
                ServerIP  = IPAddress.Parse(ip[0]);
                tcpClient.Connect(ServerIP, int.Parse(ip[1]));                 //建立与服务器的连接

                NetworkStream networkStream = tcpClient.GetStream();
                if (networkStream.CanWrite)
                {
                    IMClassLibrary.LoginDataPackage loginDataPackage = new IMClassLibrary.LoginDataPackage("127.0.0.1:" + MyPort.ToString(), "Server_Login", textBox_id.Text, sha256(passwordBox.Password)); //初始化登录数据包
                    Byte[] sendBytes = loginDataPackage.DataPackageToBytes();                                                                                                                                //登录数据包转化为字节数组
                    networkStream.Write(sendBytes, 0, sendBytes.Length);
                }

                msg = ListenThreadMethod();
            }
            catch {
                MessageBox.Show("与服务器连接失败!");
            }
            if (msg == "登录成功")
            {
                P2PClient client = new P2PClient(textBox_id.Text, tcpListener, MyPort, textBox_ip.Text.Split(':')[1], passwordBox_Copy.Password);                 //传入用户名&登录端口
                client.Show();
                Close();
            }
            else
            {
                MessageBox.Show("登录失败!");
            }
        }
Beispiel #3
0
        }         //不在主线程执行

        private void AcceptClientConnect()
        {
            //IPAddress ip = (IPAddress)Dns.GetHostAddresses(Dns.GetHostName()).GetValue(0);//服务器端ip
            IPAddress ip = IPAddress.Parse("127.0.0.1");

            try {
                myListener = new TcpListener(ip, nowEnterPort); //创建TcpListener实例
                myListener.Start();                             //start
            }
            catch {
                MessageBox.Show("TcpListener创建失败,请更改端口号或检查计算机网络!");
                Close();
                return;
            }
            var newClient = new TcpClient();

            while (true)
            {
                try {
                    newClient = myListener.AcceptTcpClient();                    //等待客户端连接
                }
                catch {
                    if (newClient == null)
                    {
                        return;
                    }
                }

                try {
                    var    IP           = newClient.Client.RemoteEndPoint.ToString();
                    byte[] receiveBytes = ReadFromTcpClient(newClient);
                    int    type         = 0;
                    using (MemoryStream ms = new MemoryStream(receiveBytes)) {
                        IFormatter formatter   = new BinaryFormatter();
                        var        DataPackage = formatter.Deserialize(ms) as IMClassLibrary.DataPackage;
                        if (DataPackage == null)
                        {
                            MessageBox.Show("接收数据非数据包");
                            continue;
                        }
                        type = DataPackage.MessageType;
                    }
                    if (type == 0)
                    {
                        MessageBox.Show("数据包非法");
                        continue;
                    }
                    switch (type)
                    {
                    case 1: {
                        var LogIn = new IMClassLibrary.LoginDataPackage(receiveBytes);
                        if (LogIn.Receiver == "Server_Reg")
                        {
                            var  newUser    = new UserClass(LogIn.UserID, LogIn.Password);
                            bool CanResiger = true;
                            foreach (UserClass nowUser in user)
                            {
                                if (nowUser.userId == newUser.userId)
                                {
                                    CanResiger = false;
                                    break;
                                }
                            }
                            if (CanResiger == false)
                            {
                                SendMessageTo(LogIn.Sender.Split(':')[0], LogIn.Sender.Split(':')[1], "注册失败");
                            }
                            else
                            {
                                user.Add(newUser);
                                SendMessageTo(LogIn.Sender.Split(':')[0], LogIn.Sender.Split(':')[1], "注册成功");
                                ///////////////////////////
                            }
                            continue;
                        }
                        bool SuccessLogin = false;
                        for (int i = 0; i < user.Count; ++i)
                        {
                            var nowUser = (UserClass)user[i];
                            if (LogIn.UserID == nowUser.userId && LogIn.Password == nowUser.password)
                            {
                                SuccessLogin     = true;
                                nowUser.isOnline = true;
                            }
                            user[i] = nowUser;
                        }
                        if (SuccessLogin == false)
                        {
                            SendMessageTo(LogIn.Sender.Split(':')[0], LogIn.Sender.Split(':')[1], "登录失败");
                            continue;
                        }
                        else
                        {
                            SendMessageTo(LogIn.Sender.Split(':')[0], LogIn.Sender.Split(':')[1], "登录成功");
                            continue;
                        }
                    }
                    break;


                    case 2: {
                        var LogOut = new IMClassLibrary.LogoutDataPackage(receiveBytes);
                        for (int i = 0; i < user.Count; ++i)
                        {
                            var t = (UserClass)user[i];
                            if (t.userId == LogOut.UserID)
                            {
                                t.isOnline = false;
                                user[i]    = t;
                                break;
                            }
                        }
                    }
                    break;


                    case 3: {
                        MessageBox.Show("发送了父类聊天数据包");
                    }
                    break;


                    /*
                     *  case 4: {
                     * var message = new IMClassLibrary.SingleChatDataPackage(receiveBytes);
                     * var receiver = message.Receiver;
                     * foreach (UserClass nowUser in user) {
                     * if (receiver == nowUser.userId) {
                     * nowUser.message.Add(message);
                     * break;
                     * }
                     * }
                     * }
                     * break;
                     */
                    case 5: {
                        var message  = new IMClassLibrary.SingleChatDataPackage(receiveBytes);
                        var receiver = message.Receiver;
                        foreach (UserClass nowUser in user)
                        {
                            if (receiver == nowUser.userId)
                            {
                                //nowUser.message.Add(message);
                                break;
                            }
                        }
                    }
                    break;


                        /*
                         *  case 6: {
                         * var message = new IMClassLibrary.ChangeNameDataPackage(receiveBytes);
                         * var receiver = message.Receiver;
                         * foreach (UserClass nowUser in user) {
                         * if (receiver == nowUser.userId)
                         * nowUser.name = message.Name;
                         * else
                         * nowUser.message.Add(message);
                         * }
                         * }
                         * break;
                         */
                    }
                }
                catch {
                    break;
                }
            }
        }