NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Java client - server

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Nový:25.5.2017 18:44

Ahoj,

mám takový malý problém. Mám tento kód:

public Server()
       try {
          ServerSocket = new ServerSocket(8080);
          System.out.println("Server has been launched.");
          connection = new DBconnection();
          connection.startConnection();
          System.out.println("Succesfully connected to database!");
      } catch(IOException IOe) {
          System.out.println("Can not establish server!");
          System.exit(-1);
      }
        }
         public static void main(String[] args) {
                Server server = new Server();
        }

        public boolean login(String username, String password)
        {
            /*
            Verifying logins.
            - Returns TRUE if the username and password are correct
            - else FALSE
            */
            return true;
        }

        public String getSaveGame(User user)
        {
            String saveData = "";
            /*
             It downloads the saved position from the server.
            */
            return saveData;
        }

        public void uploadSaveGame(String saveData)
        {
            /*
            Uploads the saved position
            */
        }

A já nevím, jak to udělat. Aplikace by se měla připojit k existující databázi a stáhnout některé údaje.

Mohl byste prosím napsat první metodu, abyste zjistili, jak se to dělá? Vím, že je zde tutoriály a koukal jsem na ně, nicméně stále mi některé věci nejsou jasné.

Moc díky!

PS

Nejsem si jistý ani tou konektivitou. Mám údaje o databázi (host, login a heslo) a v první řadě bych se asi měl k ní připojit, než začnu řešit stahování dat. To budu dělat přes client - server? Nějak v tom mám trošku zmatek, co se týká tohohle. Třída server tedy bude obsahovat data, díky kterým se připojím a třída client bude obsahovat co? Dále jsem našel, tak by se měly nějak zvlášť řešit pakety?

Díky za odpovědi!

 
Odpovědět
25.5.2017 18:44
Avatar
Robert Michalovič:26.5.2017 8:22

Toto se ti nebude líbit ale nejde to jinak. Vyser se na to programování sítě(socket) + spojení s databází. Máš elementární problémy v základní syntaxi. Nejdříve se nauč pořádně základní programování to jest : třídy, objekty, reference, metody, datové typy, cykly, vyjímky, proměnné třídy, apod. Tento program klient-server zkus až tak za 2-3 měsíce až ti ty věci budou skutečně jasné.

 
Nahoru Odpovědět
26.5.2017 8:22
Avatar
Odpovídá na Tomáš Nový
Erik Šťastný:26.5.2017 10:05

V prvé řadě jsi ani neřekl jakou používáš databázi. V druhé řádě tento kus kódu není zrovna 2x výstižný, hádám, že nad tímhle kouskem je třída Server, ale můžu jen hádat. Navíc pleteš dvě věci databázový klient a do toho nějaký další server socket. Ten nejspíše s databází nemá nic společného.

Tyhle věci se řeší tak, že máš již nějakou třídu, kterou často udělal někdo jiný (většinou tvůrce databáze) a ten používáš.

Nicméně abych splnil tvou otázku takhle například vypadá moje databázová třída s "login" metodou v mojí serverové aplikaci. Používám C# nicméně ti jde asi o úplný základ jak to vůbec může vypadat.

class Database
{
    private string connectionString;

    public Database(string server, string database, string uid, string password)
    {
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";CHARSET=utf8mb4";
    }

    public bool AreCredentialsOK(string username, string password)
    {
        using (MySqlConnection connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            using (MySqlCommand cmd = connection.CreateCommand())
            {
                cmd.CommandText = "SELECT Count(*) FROM logins WHERE username = @user AND password = @pass";
                cmd.Parameters.AddWithValue("@user", username);
                cmd.Parameters.AddWithValue("@pass", password);

                int count = int.Parse(cmd.ExecuteScalar().ToString());
                return count > 0;
            }
        }
    }
}
Editováno 26.5.2017 10:05
 
Nahoru Odpovědět
26.5.2017 10:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.