コード例 #1
0
        public void Init()
        {
            initSocket();

            sListener.Listen(10);
            while (true)
            {
                Socket handler = sListener.Accept();
                string data    = null;
                try
                {
                    data += SocketUtils.RecvData(handler);
                    Console.WriteLine("Начал приёмку от {0} данные {1}", handler.RemoteEndPoint.ToString(), data);
                    switch (data)
                    {
                    case Properties.BEGIN:
                    {
                        BeginCommunication(handler);
                        break;
                    }

                    default:
                    {
                        mainWindow.write(CriptoUtils.Decrypt(data, Properties.getSessionKey()));
                        break;
                    }
                    }
                    close(handler);
                }
                catch (Exception e)
                {
                    mainWindow.write(e.Message);
                }
            }
        }
コード例 #2
0
        private void BeginCommunication(Socket handler)
        {
            try
            {
                bool isComm = isCommunication();
                if (!isComm)
                {
                    handler.Send(Encoding.UTF8.GetBytes(Properties.NO_COMMUNICATION));
                    return;
                }


                string    privateKey = Properties.getPrivateKey();
                PublicKey publicKey  = Properties.getPublicKey();

                char[] sendKey = CriptoUtils.createSesionKey(publicKey, privateKey.ToCharArray());
                handler.Send(Encoding.UTF8.GetBytes(sendKey));

                string recvKey = SocketUtils.RecvData(handler);
                Console.WriteLine(recvKey.Length + " " + privateKey.Length);
                char[] sessionKey = CriptoUtils.createSesionKey(new PublicKey(recvKey, publicKey.mod), privateKey.ToCharArray());
                Properties.setSessionKey(new string(sessionKey));
                string encodedString = CriptoUtils.Encrypt(Properties.TEST_COMMUNICATON, Properties.getSessionKey());
                handler.Send(Encoding.UTF8.GetBytes(encodedString));
                mainWindow.write(SocketClient.SUCCESS);
                mainWindow.setEnabledSend();
            }
            catch (Exception e)
            {
                mainWindow.write("Не удалось установить соединение по причине: " + e.Message);
            }
        }
コード例 #3
0
 public SocketServer(string domain, int port)
 {
     this.domain     = domain;
     this.serverPort = port;
     char[] privateKey = CriptoUtils.Generic(32);
     Properties.setPrivateKey(new string(privateKey));
 }
コード例 #4
0
        public bool SendMessageFromSocket(string message, bool isCrypto)
        {
            Socket sender = null;

            try
            {
                sender = init();
                Console.WriteLine("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString());
                byte[] msg       = Encoding.UTF8.GetBytes(isCrypto? CriptoUtils.Encrypt(message, Properties.getSessionKey()): message);
                int    bytesSent = sender.Send(msg);
                Console.WriteLine("Сокет послал с {0} ", sender.RemoteEndPoint.ToString());
                return(true);
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
                return(false);
            }
            finally
            {
                close(sender);
            }
        }
コード例 #5
0
        public string connect()
        {
            Socket sender = null;

            try
            {
                sender = init();
                sender.Send(Encoding.UTF8.GetBytes(Properties.BEGIN));
                string recvKey = SocketUtils.RecvData(sender);
                Console.WriteLine(recvKey);
                if (Properties.NO_COMMUNICATION.Equals(recvKey))
                {
                    return(REJECT);
                }

                string    privateKey = Properties.getPrivateKey();
                PublicKey publicKey  = Properties.getPublicKey();
                char[]    sendKey    = CriptoUtils.createSesionKey(publicKey, privateKey.ToCharArray());
                sender.Send(Encoding.UTF8.GetBytes(sendKey));

                Console.WriteLine(recvKey.Length + " " + privateKey.Length);
                char[] sessionKey = CriptoUtils.createSesionKey(new PublicKey(recvKey, publicKey.mod), privateKey.ToCharArray());
                Properties.setSessionKey(new string(sessionKey));

                string testMsg = CriptoUtils.Decrypt(SocketUtils.RecvData(sender), Properties.getSessionKey());

                return(Properties.TEST_COMMUNICATON.Equals(testMsg) ? SUCCESS : FAILED);

/*
 *              //so2.workSocket = sender;
 *              //Socket temp = sender;
 *              //sender.BeginReceive(so2.buffer, 0, StateObject.BUFFER_SIZE, 0, new AsyncCallback(Read_Callback), so2);
 *              //sender.BeginReceive(recvBuf, 0, recvBuf.Length, 0, recBack, null);
 *              //so2.workSocket.Close();
 *              Stopwatch stopWatch = new Stopwatch();
 *              TimeSpan ts = new TimeSpan();
 *              stopWatch.Start();
 *              int bytesRec = 0;
 *              //Thread.Sleep(3000);
 *              do
 *              {
 *                  //Thread.Sleep(3000);
 *                  ts = stopWatch.Elapsed;
 *                  //Console.WriteLine(connec);
 *              } while ((ts.Seconds < (int)2) && connec!=true);
 *              //close();
 *              //sender = null;
 *              //init();
 *              stopWatch.Stop();
 *
 *              return "fail";
 */
            }
            catch (Exception e)
            {
                return(e.Message);
            }
            finally
            {
                close(sender);
            }
        }