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); } }
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); }
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); }