Java вход в систему с сокетами - PullRequest
0 голосов
/ 22 декабря 2018

На этой неделе я начал работать с java-сокетами, и первой идеей было создать форму входа в систему, а затем некоторые формы, которые будут получать данные из БД.

Имя входа работает, но оно толькопроверяет один раз, потому что сервер закрывается.Я думаю, что мне нужно создать оператор while, чтобы сервер всегда слушал, но я на самом деле не знаю, где и как его разместить.

Пока это мой код: Сервер:

package pkgnew.sockets;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    ServerSocket serversocket;
    Socket client;

    BufferedReader input;
    PrintWriter output;

    public void start() throws IOException{
        serversocket = new ServerSocket(9090);
        System.out.println("Connection Starting on port:" + serversocket.getLocalPort() );
        //make connection to client on port specified


        //accept connection from client
        client = serversocket.accept();

        System.out.println("Waiting for connection from client");

        try {
            logInfo();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void logInfo() throws Exception{
        //open buffered reader for reading data from client

        input = new BufferedReader(new InputStreamReader(client.getInputStream()));

        String username = input.readLine();
        System.out.println("username" + username);
        String password = input.readLine();
        System.out.println("password" + password);

        //open printwriter for writing data to client
        output = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));


        if(username.equals("User") &&password.equals("Password")){
            output.println("Welcome, " + username);
        }else{
            output.println("Login Failed");
        }
        output.flush();
        output.close();

    }
    public static void main(String[] args){
        Server server = new Server();
        try {
            server.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }       

}

Клиент:

package pkgnew.sockets;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;


public class Client {


    Socket socket;
    BufferedReader read;
    PrintWriter output;

    public void startClient() throws UnknownHostException, IOException{
        //Create socket connection
        socket = new Socket("localhos", 9090);

        //create printwriter for sending login to server
        output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

        //prompt for user name
        String username = JOptionPane.showInputDialog(null, "Enter User Name:");

        //send user name to server
        output.println(username);

        //prompt for password
        String password = JOptionPane.showInputDialog(null, "Enter Password");

        //send password to server
        output.println(password);
        output.flush();

        //create Buffered reader for reading response from server
        read = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //read response from server
        String response = read.readLine();
        System.out.println("This is the response: " + response);

        //display response
        JOptionPane.showMessageDialog(null, response);
    }



    public static void main(String args[]){
        Client client = new Client();
        try {
            client.startClient();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 22 декабря 2018
use something like this,

while(true){
    Socket clientSocket = serverSocket.accept();
        new Thread(new Runnable() {
            @Override
            public void run() {
              login();
            }
        });
}

// где-то вниз, вид отключения к вашему серверу serverSocket.close ();

хорошо, этот код только для вашего понимания, на самом деле в реальном времени сервер будет использовать threadpools для управления количествомзапрос во время обрабатывается сервером, и максимальное количество запросов может быть поставлено в очередь, максимальное количество соединений может быть открыто с безопасностью ssl / tls и множеством факторов ....

как обычно, для большего понимания вы можете пройти через http://tomcat.apache.org/tomcat-9.0-doc/ лучшее место, чтобы узнать, как работает https сервер :) наслаждайтесь

...