Anonymní profil Johnny – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Johnny – Programujte.comAnonymní profil Johnny – Programujte.com

 

Příspěvky odeslané z IP adresy 147.32.96.–

Johnny
Java › Socket Java Server - Usernam…
24. 3. 2014   #188578

Hehe, to je tím, že neumím pracovat se Streamama :) díky moc ! :) vyřešeno :)

Johnny
Java › Socket Java Server - Usernam…
24. 3. 2014   #188566

 Nakonec jsem to předělal na tenhle kod. A připojuju se k tomuhle bežícímu serveru pres windows cmd. Přesněji telnet localhost <portnumber> a po připojení komunikuji se serverem přes protokol TCP. Potřeboval bych tedy vyřešit tu komunikaci když do bežící příkazovky napíšu text, aby mi ho server přijal a uložil pro další zpracování.

public class Server extends Thread {
 
    StringBuilder sb = new StringBuilder();
    int indicator = 0;
    Socket socket;
    String name = "";
    String password = "";
 
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(3618);
            while (true) {
                Socket s = ss.accept();
                Server srv = new Server();
                srv.socket = s;
                srv.start();
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    @Override
    public void run() {
        try {
            String str = "";
            int chars;
            int ch = 0;
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
            while ((chars = in.read()) != -1) {
                sb.append((char) chars);
                str = sb.toString();
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    void sendMessage(String message, PrintWriter pw) {
        pw.write(message);
        pw.flush();
    }
Johnny
Java › Socket Java Server - Usernam…
24. 3. 2014   #188558

#1 Johnny 

Nakonec jsem to trošku předělal. A myslel sem, že ty údaje zvládnu načíst jen v run(), ale to asi ne. Tak se snažím udělat dvě další metody, které mi ale přijdou že mají pracovat stejně.

public class Server extends Thread {

    StringBuilder sb = new StringBuilder();
    int indicator = 0;
    Socket socket;
    String name = "";
    String password = "";

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(3618);
            while (true) {
                Socket s = ss.accept();
                Server srv = new Server();
                srv.socket = s;
                srv.start();
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    @Override
    public void run() {
        try {
            String str = "";
            int chars;
            int ch = 0;
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            //sendMessage("200" + " " + "LOGIN" + "\r\n", out);
            username();
            password();

            System.out.println(name);
            System.out.println(password);

            while ((chars = in.read()) != -1) {
                sb.append((char) chars);
                str = sb.toString();

                if (!name.equals(str)) {
                    name = str;
                    sendMessage("PASSWORD\r\n", out);
                }
                if (Integer.parseInt(str) == Integer.parseInt(name)) {
                    sendMessage("JE TO OK\r\n", out);
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void sendMessage(String message, PrintWriter pw) {
        pw.write(message);
        pw.flush();
    }

    int passwordCheck(String s) {
        int sum = 0;
        for (int i = 0; i < s.length(); i++) {
            sum += s.charAt(i);
        }
        return sum;
    }

    void username() throws IOException {
        String str = "";
        int chars;
        int ch = 0;
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        sendMessage("200" + " " + "LOGIN" + "\r\n", out);

        while ((chars = in.read()) != -1) {
            sb.append((char) chars);
            str = sb.toString();
            if (str.contains("\r\n")) {
                name = str;
            }
        }
    }

    void password() throws IOException {
        String str = "";
        int chars;
        int ch = 0;
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        sendMessage("201" + " " + "PASSWORD" + "\r\n", out);

        while ((chars = in.read()) != -1) {
            sb.append((char) chars);
            str = sb.toString();
            if (str.contains("\r\n")) {
                password = str;
                break;
            }
        }
    }
}


Johnny
Java › Socket Java Server - Usernam…
23. 3. 2014   #188551

 Ahoj, rád bych si u tohoto kódu vytvořil jednoduchou autentizaci. Kdy Server po spuštění bude vyžadovat Username, po zadání do konzole si ho uloží a dále bude vyžadovat Password, což bude číslo, které bude součtem ASCII hodnot zadaného Username. Bohužel ale nevím, jak nastavit server, aby tyto dva požadavky obsloužil za sebou a uložil si je ? Za pomoc budu velice rád !

Napadlo mě vytvořit si dvě metody, kde by každá do jisté míry kopírovala while smyčku z metody RUN, ale nějak se mi to nedaří. Díky za případné rady a tipy.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Jenda
 */
public class Server extends Thread {

    Socket s;

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(5222);
            while (true) {
                Socket s = ss.accept();
                Server srv = new Server();
                srv.s = s;
                srv.start();
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /*Tady si měl jako vstupní parametr "Socket s" takže ti to
bralo z toho, ale už si nikde tomu vláknu neřekl kde to "s"
má vzít. Zkus to takhle.*/
    @Override
    public void run() {
        try {
            InputStream is = s.getInputStream(); //ze site
            OutputStream os = s.getOutputStream(); // to co ja posilam do site
            BufferedReader br = new BufferedReader(new InputStreamReader(is)); //obaleni buffered abych mohl cist po celych radcich
            String str;
            while ((str = br.readLine()) != null) {
                System.out.println(">> " + str);
                str = "SRV: " + str + "\n";
                os.write(str.getBytes());
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý