Beispiel #1
0
 void disconect()
 {
     //Disable both sending and receiving on this Socket.
     _socket?.Shutdown(SocketShutdown.Both);
     // Closes the Socket connection and releases all associated resources.
     _socket?.Close();
     re.Abort();                    //not needed
     ConnectionButton.Text = "Connect";
     connection            = false; //we disconected
     GuessButton.Enabled   = false;
     TrackBarGuess.Enabled = false;
 }
        public void Disconnect()
        {
            try
            {
                clientSocket?.Shutdown(SocketShutdown.Both);
            }
            catch
            {
            }
            clientSocket?.Close();

            broadcastThread?.Join(1);
            receiveThread?.Join(1);
        }
 private void Window_Closed(object sender, EventArgs e)
 {
     socket?.Shutdown(SocketShutdown.Both);
     socket?.Close();
 }
Beispiel #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (username.Text != "" && password.Text != "")
            {
                //Creamos un IPEndPoint con la dirección IP y puerto del servidor al que deseamos conectarnos.
                IPAddress  direc = IPAddress.Parse("147.83.117.22");//147.83.117.22  192.168.56.101
                IPEndPoint ipep  = new IPEndPoint(direc, puerto);

                //Creamos el socket .
                server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                //Intentamos conectar el socket.
                try
                {
                    server.Connect(ipep);
                }

                catch (SocketException ex)
                {
                    //Si hay excepcion imprimimos el error y salimos del programa con return.
                    MessageBox.Show("No he podido conectar con el servidor" + ex.Message);
                    return;
                }

                //Variables necesarias para el mensaje al servidor.
                string user    = username.Text;
                string pass    = password.Text;
                string mensaje = "100/" + user + "/" + pass;

                //Envío del mensaje al servidor.
                byte[] msg = System.Text.Encoding.ASCII.GetBytes(mensaje);
                server.Send(msg);

                //Se recibe la respuesta del servidor.
                byte[] msg2 = new byte[80];
                server.Receive(msg2);
                mensaje = Encoding.ASCII.GetString(msg2).Split('\0')[0];

                //Inicio de sesión correcto.
                if (mensaje == "100/Correct")
                {
                    //Stop a la musica de inicio.
                    player.Stop();

                    //Creación y transferencia de datos al formulaio principal.
                    prin = new Principal();
                    prin.setServer(server);
                    prin.setUser(user);
                    this.Hide();
                    prin.ShowDialog();

                    //Recibimos el estado del usuario del formulario principal por si este desea desconectarse del juego.
                    estado = prin.getStatus();

                    if (estado == 0)
                    {
                        //Mensaje de desconexión.
                        mensaje = "0/";
                        msg     = System.Text.Encoding.ASCII.GetBytes(mensaje);
                        server.Send(msg);

                        //Desconexión.
                        server.Shutdown(SocketShutdown.Both);
                        server.Close();
                    }

                    this.Close();
                }

                //Se informa al usuario mediante un MesssageBox del motivo por el cual el inicio de sesión ha fallado.
                else
                {
                    //Usuario inexistente en la base de datos del juego.
                    if (mensaje == "100/NoUser")
                    {
                        MessageBox.Show("El usuario introducido no existe, porfavor regístrese.");
                    }

                    //La contraseña introducida por el usuarios es errónea.
                    else if (mensaje == "100/Incorrect")
                    {
                        MessageBox.Show("Contraseña incorrecta.");
                    }

                    //Mensaje de desconexión.
                    mensaje = "0/";
                    msg     = System.Text.Encoding.ASCII.GetBytes(mensaje);
                    server.Send(msg);

                    //Desconexión.
                    server.Shutdown(SocketShutdown.Both);
                    server.Close();
                }
            }
        }
Beispiel #5
0
        static void Main(string[] args)
        {
            int t = 0;

            while (true)
            {
                try
                {
                    IPAddress serverip = IPAddress.Parse("127.0.0.1");

                    IPEndPoint ServerEndPoint = new IPEndPoint(serverip, 1234);

                    Socket socket = new Socket(serverip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                    socket.Connect(ServerEndPoint);


                    string message_to_send;

                    while (true)
                    {
                        Console.Write("Enter the message to send to the server: (quit to exit) ");
                        message_to_send = Console.ReadLine();
                        if (message_to_send.ToLower() == "quit")
                        {
                            Environment.Exit(0);
                        }
                        if (message_to_send == "")
                        {
                            Console.WriteLine("Please enter a valid message ..."); continue;
                        }
                        else
                        {
                            break;
                        }
                    }

                    byte[] message_to_send_in_bytes = Encoding.ASCII.GetBytes(message_to_send);
                    int    byteSent = socket.Send(message_to_send_in_bytes);


                    byte[] message_received = new byte[1024];


                    int byteReceived = socket.Receive(message_received);
                    Console.Write("Message received from the server");

                    Console.WriteLine(Encoding.ASCII.GetString(message_received, 0, byteReceived));


                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
                }

                catch (Exception e)
                {
                    Console.WriteLine("Could not coonect to the server. Trying to recconect in 2 seconds ..."); Thread.Sleep(2000); t++;
                    if (t == 3)
                    {
                        Console.WriteLine("Could not coonect to the server. Try again later ..."); Console.ReadKey(); Environment.Exit(0);
                    }
                }
            }


            Console.ReadKey();
        }
Beispiel #6
0
        private static void StartClient()
        {
            EventStore.AddNewEvent(new ServerGame.Core.Event.LoopSendingUDP(OnLoopSedingUDP));

            EventStore.AddNewEvent(new ServerGame.Core.Event.Authtcation(OnAuthtcation));
            EventStore.AddNewEvent(new ServerGame.Core.Event.ConvertConnctionToNewServeerPort(OnConvertConnctionToNewServeerPort));
            EventStore.AddNewEvent(new ServerGame.Core.Event.Broadcast(OnBroadcast));

            Console.WriteLine("Please Enter IP(if not is same machen name) : ");
            ip = Console.ReadLine();
            if (ip == "")
            {
                ip = Dns.GetHostName();
            }

            var _tcp = true;

            Console.WriteLine("Please Enter false or 0 or press enter if use udp : ");
            var ss = Console.ReadLine();

            if (ss == "0" || ss == "false" || ss == "")
            {
                _tcp = false;
            }
            if (_tcp)
            {
                Console.WriteLine("enter port number deflut is : " + porttcp.ToString());
                var _port = Console.ReadLine();
                if (_port != "")
                {
                    port = Convert.ToInt32(_port);
                }
                else
                {
                    port = porttcp;
                }
            }
            else
            {
                Console.WriteLine("Please Enter port(if not,is 9998) : ");
                var _port = Console.ReadLine();
                if (_port != "")
                {
                    port = Convert.ToInt32(_port);
                }
                else
                {
                    port = portudp;
                }
            }
            try
            {
                if (_tcp)
                {
                    IPHostEntry ipHostInfo = Dns.GetHostEntry(ip);//Dns.GetHostEntry("net.super-bots.com");
                    IPAddress   ipAddress  = ipHostInfo.AddressList[ipHostInfo.AddressList.Length - 1];
                    IPEndPoint  remoteEP   = new IPEndPoint(ipAddress, port);

                    // Create a TCP/IP socket.
                    Socket client = new Socket(ipAddress.AddressFamily,
                                               SocketType.Stream, ProtocolType.Tcp);


                    client.BeginConnect(remoteEP,
                                        new AsyncCallback(ConnectCallback), client);
                    connectDone.WaitOne();
                    if (client.Connected == false)
                    {
                        return;
                    }

                    Task.Run(() =>
                    {
                        while (true)
                        {
                            receiveDone.Reset();
                            Receive(client);
                            receiveDone.WaitOne();

                            Console.WriteLine("Response received : {0}", response);
                        }
                    });

                    PackSendData data     = null;
                    List <Data>  datalist = null;
                    while (true)
                    {
                        var readline = Console.ReadLine();

                        if (readline == "close")
                        {
                            break;
                        }

                        if (readline.Split(' ')[0].Trim() == "loop") // loop 500 20 mohmmadmaskdmqkmfwemgflwjnemgljnwejgjwhnglkwe
                        {
                            var manytime        = Convert.ToInt32(readline.Split(' ')[1]);
                            var sleeptimeMilSec = Convert.ToInt32(readline.Split(' ')[2]);
                            var world           = "";

                            for (int i = 3; i < readline.Split(' ').Length; i++)
                            {
                                world += " " + readline.Split(' ')[i];
                            }

                            while (manytime > 0)
                            {
                                sendDone.Reset();
                                datalist = new List <Data>();
                                datalist.Add(new Data(manytime.ToString() + world, (byte)DataType.String));

                                data = new PackSendData(1, datalist);
                                Send(client, ServerGame.Core.Serialize.Serialize.serialize(data));
                                sendDone.WaitOne();

                                manytime--;
                                Thread.Sleep(sleeptimeMilSec);
                            }
                        }
                        else if (readline.Split(' ')[0].Trim() == "event")  // loop 500 20 mohmmadmaskdmqkmfwemgflwjnemgljnwejgjwhnglkwe
                        {
                            var datasnding  = readline.Split(' ');
                            var numberevnet = Convert.ToInt32(datasnding[1]);
                            var world       = "";

                            for (int i = 2; i < readline.Split(' ').Length; i++)
                            {
                                world += " " + readline.Split(' ')[i];
                            }
                            switch (numberevnet)
                            {
                            case 1:
                                datalist = new List <Data>();
                                datalist.Add(new Data(datasnding[2], 0));
                                datalist.Add(new Data(datasnding[3], 1));
                                datalist.Add(new Data(datasnding[4], 2));
                                datalist.Add(new Data(datasnding[5], 3));
                                data = new PackSendData(1, datalist);
                                Send(client, ServerGame.Core.Serialize.Serialize.serialize(data));
                                break;

                            case 2:
                                datalist = new List <Data>();
                                datalist.Add(new Data(world, 0));
                                data = new PackSendData(2, datalist);
                                Send(client, ServerGame.Core.Serialize.Serialize.serialize(data));
                                break;

                            default:
                                break;
                            }
                        }
                        datalist = new List <Data>();
                        datalist.Add(new Data(readline, (byte)DataType.String));
                        data = new PackSendData(0, datalist);

                        Send(client, ServerGame.Core.Serialize.Serialize.serialize(data));
                        sendDone.WaitOne();
                    }
                    // Release the socket.
                    client.Shutdown(SocketShutdown.Both);
                    client.Close();
                }
                else
                {
                    startRciverUDP();

                    while (true)
                    {
                        var readline = Console.ReadLine();

                        if (readline == "stop")
                        {
                            break;
                        }
                        List <Data>  datalist = null;
                        PackSendData data     = null;

                        if (readline.Split(' ')[0].Trim() == "event")
                        {
                            var datasnding  = readline.Split(' ');
                            var numberevnet = Convert.ToInt32(datasnding[1]);
                            var world       = "";

                            for (int i = 2; i < readline.Split(' ').Length; i++)
                            {
                                world += " " + readline.Split(' ')[i];
                            }
                            switch (numberevnet)
                            {
                            case 1:
                                datalist = new List <Data>();
                                datalist.Add(new Data(datasnding[2], 0));
                                datalist.Add(new Data(datasnding[3], 1));
                                datalist.Add(new Data(datasnding[4], 2));
                                datalist.Add(new Data(datasnding[5], 3));
                                data = new PackSendData(1, datalist);
                                startSendUDP(data);
                                break;

                            case 2:
                                datalist = new List <Data>();
                                datalist.Add(new Data(world, 0));
                                data = new PackSendData(2, datalist);
                                startSendUDP(data);
                                break;

                            default:
                                break;
                            }
                        }
                        else if (readline.Split(' ')[0].Trim() == "loop")
                        {
                            var manytime        = Convert.ToInt32(readline.Split(' ')[1]);
                            var sleeptimeMilSec = Convert.ToInt32(readline.Split(' ')[2]);
                            var world           = "";

                            for (int i = 3; i < readline.Split(' ').Length; i++)
                            {
                                world += " " + readline.Split(' ')[i];
                            }



                            while (manytime > 0)
                            {
                                sendDone.Reset();
                                datalist = new List <Data>();
                                datalist.Add(new Data(manytime.ToString() + world, (byte)DataType.String));

                                data = new PackSendData(0, datalist);
                                startSendUDP(data);
                                sendDone.WaitOne();

                                manytime--;
                                Thread.Sleep(sleeptimeMilSec);
                            }
                        }
                        else
                        {
                            datalist = new List <Data>();
                            datalist.Add(new Data(readline, 0));

                            data = new PackSendData(0, datalist);

                            startSendUDP(data);
                        }
                    }
                }
            }


            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Beispiel #7
0
        static void Main(string[] args)
        {
            try
            {
                //Для подключения к SQLite, создается один раз
                SQLiteFactory factory = (SQLiteFactory)DbProviderFactories.GetFactory("System.Data.SQLite");

                Console.WriteLine("Сгенерировать новую БД SQLite? (y/n)");
                ConsoleKeyInfo keyInfo = Console.ReadKey(false);
                if (keyInfo.KeyChar == 'y' || keyInfo.KeyChar == 'у' || keyInfo.KeyChar == 'д')
                {
                    //генерация новой БД
                    Console.WriteLine("Запись данных в БД SQLite");
                    WriteSQLite(factory);
                    Console.WriteLine("Нажмите любую клавишу для продолжения...");
                    Console.ReadKey(true);
                }

                //чтение БД
                Console.WriteLine("Чтение данных из БД SQLite");
                List <FullRow> rows     = ReadSQLite(factory);
                string         str_data = JsonConvert.SerializeObject(rows);

                // подключаемся к удаленному хосту
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
                Socket     socket  = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipPoint);

                Console.WriteLine("Шифрование данных");

                // получаем публичный ключ RSA
                byte[]        data_rsa   = new byte[2048]; // буфер для ответа
                int           bytes      = socket.Receive(data_rsa, data_rsa.Length, 0);
                string        serial_rsa = Encoding.Unicode.GetString(data_rsa, 0, bytes);
                RSAParameters rsaParams  = JsonConvert.DeserializeObject <RSAParameters>(serial_rsa);

                //шифруем симметричным шифрованием данные
                Rijndael cipher    = Rijndael.Create();
                string   encrypted = Encrypt(str_data, cipher.Key, cipher.IV);
                //string decrypted = Decrypt(encrypted, cipher.Key, cipher.IV);

                //шифруем RSA ключ симметричного шифрования
                byte[] encrypted_key = RSAEncrypt(cipher.Key, rsaParams);
                //byte[] decrypted_key = RSAEncrypt(encrypted_key, RSA.ExportParameters(true));

                //удаляем из памяти экземпляр класса симметричного шифрования
                byte[] iv = cipher.IV;
                cipher.Dispose();

                Console.WriteLine("Пересылка данных");

                //отправляем зашифрованный ключ симметричного шифрования
                socket.Send(encrypted_key);

                // получаем подтверждение
                byte[] data = new byte[256]; // буфер для ответа
                bytes = socket.Receive(data, data.Length, 0);
                string answer = Encoding.Unicode.GetString(data, 0, bytes);
                if (!answer.Equals("ready"))
                {
                    throw new Exception("Получены некорректные данные");
                }

                //отправляем инициализующий вектор симметричного шифрования в открытом виде
                socket.Send(iv);

                //получаем подтверждение
                data   = new byte[256]; // буфер для ответа
                bytes  = socket.Receive(data, data.Length, 0);
                answer = Encoding.Unicode.GetString(data, 0, bytes);
                if (!answer.Equals("ready"))
                {
                    throw new Exception("Получены некорректные данные");
                }

                //отправляем размер данных
                byte[] data_rows = Encoding.Unicode.GetBytes(encrypted);
                string message   = "отправка " + data_rows.Length;
                data = Encoding.Unicode.GetBytes(message);
                socket.Send(data);

                // получаем подтверждение
                data   = new byte[256]; // буфер для ответа
                bytes  = socket.Receive(data, data.Length, 0);
                answer = Encoding.Unicode.GetString(data, 0, bytes);
                if (!answer.Equals("ready"))
                {
                    throw new Exception("Получены некорректные данные");
                }

                //отправляем зашифрованные данные
                socket.Send(data_rows);

                // получаем количество доставленных байт
                data   = new byte[256]; // буфер для ответа
                bytes  = socket.Receive(data, data.Length, 0);
                answer = Encoding.Unicode.GetString(data, 0, bytes);

                //отображаем отчет
                string[] res = answer.Split(' ');
                if (res.Length != 2 || !res[0].Equals("доставлено"))
                {
                    throw new Exception("Получены некорректные данные");
                }
                int count = int.Parse(res[1]);
                Console.WriteLine("Отправлено {0} байт.\nДоставлено {1} байт", data_rows.Length, count);

                // закрываем сокет
                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Произошла ошибка {0}. Приложение будет закрыто.", ex.Message);
            }

            Console.WriteLine("Нажмите любую клавишу для выхода...");
            Console.ReadKey(true);
            Environment.Exit(0);
        }
// ExecuteClient() Method
        static void ExecuteClient()
        {
            try {
                // Establish the remote endpoint
                // for the socket. This example
                // uses port 11111 on the local
                // computer.
                IPHostEntry ipHost        = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress   ipAddr        = ipHost.AddressList[0];
                IPEndPoint  localEndPoint = new IPEndPoint(ipAddr, 11111);

                // Creation TCP/IP Socket using
                // Socket Class Costructor
                Socket sender = new Socket(ipAddr.AddressFamily,
                                           SocketType.Stream, ProtocolType.Tcp);

                try {
                    // Connect Socket to the remote
                    // endpoint using method Connect()
                    sender.Connect(localEndPoint);

                    // We print EndPoint information
                    // that we are connected
                    Console.WriteLine("Socket connected to -> {0} ",
                                      sender.RemoteEndPoint.ToString());

                    // Creation of messagge that
                    // we will send to Server
                    byte[] messageSent = Encoding.ASCII.GetBytes("Test Client<EOF>");
                    int    byteSent    = sender.Send(messageSent);

                    // Data buffer
                    byte[] messageReceived = new byte[1024];

                    // We receive the messagge using
                    // the method Receive(). This
                    // method returns number of bytes
                    // received, that we'll use to
                    // convert them to string
                    int byteRecv = sender.Receive(messageReceived);
                    Console.WriteLine("Message from Server -> {0}",
                                      Encoding.ASCII.GetString(messageReceived,
                                                               0, byteRecv));

                    // Close Socket using
                    // the method Close()
                    sender.Shutdown(SocketShutdown.Both);
                    sender.Close();
                }

                // Manage of Socket's Exceptions
                catch (ArgumentNullException ane) {
                    Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
                }

                catch (SocketException se) {
                    Console.WriteLine("SocketException : {0}", se.ToString());
                }

                catch (Exception e) {
                    Console.WriteLine("Unexpected exception : {0}", e.ToString());
                }
            }

            catch (Exception e) {
                Console.WriteLine(e.ToString());
            }
        }
Beispiel #9
0
 private void Close()
 {
     _socket.Shutdown(SocketShutdown.Both);
     _socket.Close();
 }
Beispiel #10
0
 /// <summary>
 /// Завершение подключения, вывод соответствующего сообщения.
 /// </summary>
 private void Shutdown()
 {
     client.Shutdown(SocketShutdown.Both);
     client.Close();
 }
Beispiel #11
0
        private void SendMessageFromSocket(object port)
        {
            try
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];

                // Соединяемся с удаленным устройством
                // Устанавливаем удаленную точку для сокета
                IPHostEntry ipHost     = Dns.GetHostEntry("localhost");
                IPAddress   ipAddr     = ipHost.AddressList[0];
                IPEndPoint  ipEndPoint = new IPEndPoint(ipAddr, (int)port);

                Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                // Соединяем сокет с удаленной точкой
                sender.Connect(ipEndPoint);
                string request = "";
                Dispatcher.Invoke(() =>
                {
                    request           = indexTextBox.Text;
                    indexTextBox.Text = string.Empty;
                });

                byte[] msg = Encoding.UTF8.GetBytes(request);

                // Отправляем данные через сокет
                int bytesSent = sender.Send(msg);

                // Получаем ответ от сервера
                int    bytesRec = sender.Receive(bytes);
                string str      = Encoding.UTF8.GetString(bytes, 0, bytesRec);
                for (int i = 0; i < str.Length; i++)
                {
                    if (str[i] == '.')
                    {
                        str = str.Insert(i + 1, ", ");
                    }
                }

                Dispatcher.Invoke(() =>
                {
                    streetTextBox.Text = str;
                });

                // Освобождаем сокет
                sender.Shutdown(SocketShutdown.Both);
                sender.Close();
            }
            catch (SocketException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (ArgumentNullException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Beispiel #12
0
 public void TerminateConnection()
 {
     Console.ReadKey(true);
     _sender.Shutdown(SocketShutdown.Both);
     _sender.Close();
 }
Beispiel #13
0
        // Function to get the score of every player from the server
        public List <Player> GetScoreAllPlayers()
        {
            List <Player> players = new List <Player>();

            // Data buffer for incoming data.
            byte[] bytes = new byte[1024];

            // Connect to a remote device.
            try
            {
                var address = Dns.GetHostEntry(serverAddress).AddressList.First(ip => ip.AddressFamily == AddressFamily.InterNetworkV6); // IPV4 to IPV6 address

                IPAddress  ipAddress = address;
                IPEndPoint remoteEP  = new IPEndPoint(ipAddress, Int32.Parse(serverPort));

                // Create a TCP/IP  socket.
                Socket sender = new Socket(ipAddress.AddressFamily,
                                           SocketType.Stream, ProtocolType.Tcp);

                // Connect the socket to the remote endpoint. Catch any errors.
                try
                {
                    sender.Connect(remoteEP);

                    // Encode the data string into a byte array.
                    byte[] msg = Encoding.ASCII.GetBytes("<ScorePlayers>" + this.id);// Ask the score of other players

                    // Send the data through the socket.
                    int bytesSent = sender.Send(msg);

                    // Receive the response from the remote device.
                    int bytesRec = sender.Receive(bytes);

                    string result = Encoding.ASCII.GetString(bytes, 0, bytesRec);

                    if (result.IndexOf("<ReturnScorePlayers>") < 0)
                    {
                        Console.WriteLine("Server return error.");
                    }

                    // Release the socket.
                    sender.Shutdown(SocketShutdown.Both);
                    sender.Close();

                    // Get the answer of the server and put it on the List of players score
                    result = result.Replace("<ReturnScorePlayers>", "");

                    string[] result_array = result.Split(';');

                    for (int i = 0; i < result_array.Length; i += 2)
                    {
                        players.Add(new Player(result_array[i], Int16.Parse(result_array[i + 1])));// Create a new player with its id and score and add it to the list of all players
                    }
                    return(players);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Unexpected exception : {0}", e.ToString());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return(null);
        }