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("登录失败!"); } }
} //不在主线程执行 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; } } }