public void Start() { //start the server IPAddress iPAddress = Dns.GetHostEntry(hOST).AddressList[0]; TcpListener = new TcpListener(iPAddress, pORT); try { TcpListener.Start(); Console.WriteLine("Server started..."); } catch (Exception e) { Console.WriteLine(e.Message); } while (true) { TcpClient tcpClient = TcpListener.AcceptTcpClient(); //hand shake //Server send public key to client SendPublicKey(tcpClient); //Server read public key from client string publicKeyFromClient = ReadPublicKey(tcpClient); //handle login //Read username and password from user Message request = new Message(); var rsa = new EncryptionRSA(); rsa.SetPrivateKey(PrivateKey); request.ReadFrom(tcpClient.GetStream(), rsa); Message response = handlers[request.Header].Invoke(request); if (response.Header.Equals("OK")) { Console.WriteLine("Client authenticated is connected..."); Console.WriteLine("server sends head: " + response.Header + " body " + response.Body); var rsa2 = new EncryptionRSA(); rsa2.SetPublicKey(publicKeyFromClient); response.WriteTo(tcpClient.GetStream(), rsa2); RegisterClient(response.Body, publicKeyFromClient, tcpClient); Thread thread = new Thread(() => HandleRequest(tcpClient)); thread.Start(); } else { var rsa2 = new EncryptionRSA(); rsa2.SetPublicKey(publicKeyFromClient); response.WriteTo(tcpClient.GetStream(), rsa2); Console.WriteLine("Client failed to connect"); } } }
private void SendPublicKey(TcpClient tcpClient) { Message msgKey = new Message(); msgKey.Header = "PUBLIC_KEY"; msgKey.Body = PublicKeyToSend; msgKey.WriteTo(tcpClient.GetStream()); }
private void SendPublicKey(TcpClient tcpClient) { Message msgKey = new Message(); msgKey.Header = "PUBLIC_KEY"; msgKey.Body = PublicKeyToSend; Console.WriteLine("Server send key: " + msgKey.Body); msgKey.WriteTo(tcpClient.GetStream()); }
private void broadcast(Message request) { foreach (Tuple <string, string, TcpClient> client in ActiveClients) { string publicKey = client.Item2; var rsa = new EncryptionRSA(); rsa.SetPublicKey(publicKey); request.WriteTo(client.Item3.GetStream(), rsa); } }