示例#1
0
 public static void Start()
 {
     try
     {
         _udpServer = new UdpClient(8888, AddressFamily.InterNetwork);
         Task.Factory.StartNew(async() =>
         {
             App.SetText("Waiting for broadcast...");
             while (true)
             {
                 UdpReceiveResult data = await _udpServer.ReceiveAsync();
                 if (ConnectionCodes.RecieveCom(Encoding.UTF8.GetString(data.Buffer)) == ConnectionCodes.UDP_CLIENT_DISCOVERY_REQUEST)
                 {
                     App.SetText("Broadcast recieved");
                     string toSend        = ConnectionCodes.UdpResponseCode();
                     byte[] sendingBuffor = Encoding.ASCII.GetBytes(toSend);
                     await _udpServer.SendAsync(sendingBuffor, sendingBuffor.Length, data.RemoteEndPoint);
                     Console.WriteLine(toSend);
                 }
             }
         });
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
示例#2
0
        public bool CheckIfCodeIsValid(Socket socket)
        {
            var code = "1234";

            //GenerateCode();             //generate code
            App.SetCodeOnForm(code);              //show code

            bool valid   = false;
            int  counter = 0;

            do
            {
                SendMessageFromString(ConnectionCodes.SendServerCodeRequest(counter), socket);
                var str   = RecieveToString(socket);
                var com   = ConnectionCodes.RecieveCom(str);
                var codeR = ConnectionCodes.RecieveSecurityCode(str);

                if (com == ConnectionCodes.CLIENT_CODE_RESPONSE && codeR == /*code*/ "1234")//CHANGE IT!!!
                {
                    valid = true;
                }
                else
                {
                    counter++;
                }
            } while (!valid && counter <= 25);

            return(counter <= 25 && valid);
        }
示例#3
0
        public void AcceptCallback(IAsyncResult ar)
        {
            Socket socket;

            try
            {
                socket = ServerSocket.EndAccept(ar);
                ServerSocket.BeginAccept(AcceptCallback, null);
            }
            catch (ObjectDisposedException)
            {
                return;
            }
            ClientSockets.Add(socket);

            var com = ConnectionCodes.RecieveCom(RecieveToString(socket)); // FIRST STEP

            if (com != ConnectionCodes.CLIENT_BEGIN_SETUP)
            {
                return;
            }

            if (!CheckIfCodeIsValid(socket)) //SECOND STEP (RECIEVING security_code)
            {
                return;
            }

            var aesCrypt = new AesCypher();

            SendMessageFromString(ConnectionCodes.EncryptionKeyExchange(aesCrypt.AlgoKeyHexString), socket); //THIRD STEP SEND ENC CODE

            //FOURTH STEP GET CLIENT ID
            var recieveString = RecieveToString(socket);

            com = ConnectionCodes.RecieveCom(recieveString);
            if (com != ConnectionCodes.CLIENT_PORT_REQUEST)
            {
                return;
            }

            if (ConnectionCodes.ClientId(recieveString) == string.Empty)
            {
                return;
            }
            CyphersDictionary.Add(ConnectionCodes.ClientId(recieveString), aesCrypt); //ADD ID TO DICT

            var extIp   = string.Empty;
            var extPort = 0;

            if (!WanService.GetExternalIpAdress(out extIp))
            {
                MessageBox.Show("Error when getting external IP!");
                return;
            }

            if (!WanService.OpenNewPortForUpnp(out extPort))
            {
                MessageBox.Show("Error when opening new port for UnPnP!");
                return;
            }

            SendMessageFromString(ConnectionCodes.SetupPortResponse(extPort, extIp), socket);          //FIFTH STEP SEND EXTERNAL PORT AND IP DATA

            if (ConnectionCodes.RecieveCom(RecieveToString(socket)) != ConnectionCodes.CLIENT_CONFIRM) //SIXTH STEP CONFIRMATION
            {
                return;
            }
            SendMessageFromString(ConnectionCodes.SendCom(ConnectionCodes.SERVER_CONFIRM), socket);
        }