java сервер и клиент: данные отображаются на сервере как нулевые при отправке через тестовый клиент - PullRequest
0 голосов
/ 16 апреля 2020

Я учусь разрабатывать сервер и клиент с java 14. Я также изучаю ssl и использую sslsocketfactory.

Я запускаю это приложение на linux, если это имеет значение.

Сначала я сгенерировал хранилище ключей для ssl с помощью следующей команды:

Keytool -genkey -alias my.game -keyalg rsa -keysize 2048 -keystore game.jks (и я установил пароль. )

затем я запускаю свой сервер и клиент так:

сервер:

Java GameServer -Djavax. net .ssl.keyStore = game.jks - Djavax. net .ssl.keyStorePassword = passwd38883 -Djavax. net .debug = все

клиент:

Java Клиент -Djavax. net .ssl.trustStore = gortsstore.jks -Djavax. net .ssl.trustStorePassword = passwd38883 -Djavax. net .debug = all

ниже приведен код сервера, он состоит из двух классов: я не уверен, что я сделал полностью прав, но я действительно пытаюсь модулировать мой код.

Сервер. java:

package com.domain.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.domain.net.SecuredSocket;

public class Server {

    public int limit = 0;
    public int uptime = 0;
    private String server_name = "Default Base Server";
    private SecuredSocket secSoc;
private PrintWriter writer;
    private BufferedReader reader;
     ServerSocket serverSocket;
     Socket socket;

     // this will maintain the connection nodes.
            private static HashSet<String> names = new HashSet<String>();

            // the set of print writers.
            private static HashSet<PrintWriter> writers = new HashSet<PrintWriter>();

           private static HashSet<BufferedReader> readers = new HashSet<BufferedReader>();



        public Server() {
    super();

    this.server_name = "Galaxy 1, Milky Way";

    this.secSoc = new SecuredSocket(8888);
    this.reader = secSoc.getInputStream();
    this.writer = secSoc.getOutputStream();
        } // end default constructor.

        public void startup() {

            String user_name = "";

            while ( true ) {
                writer.println("Welcome to server:  "+this.getServerName());
                writer.println("Please Enter a name:  ");
                try {
                user_name = reader.readLine();
                System.out.println("Client entered:  "+user_name);
                } catch (IOException ex) {
                    Logger.getLogger(Server.class.getName())
                    .log(Level.SEVERE, null, ex);
                }

                writer.println("You have connected as:  "+user_name);

            }


        }
    public String getServerName() {
        return this.server_name;
    }

    public void setServerName(String name) {
        this.server_name = name;
    }


} // end class

SecureSocket. java - это то, где я вижу tup ssl socket factory et c.

package com.domain.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.net.ssl.SSLServerSocketFactory;    

public class SecuredSocket{

    int port = 0;
    private SSLServerSocketFactory sslServerSocketFactory;
    private ServerSocket serverSocket;
    private Socket socket;
    private PrintWriter out;
    private BufferedReader reader;


    public SecuredSocket(int p){

        this.port = p; // the passed through server port from the server class.


    sslServerSocketFactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

                try {
                serverSocket = 
                    sslServerSocketFactory.createServerSocket(port);
            System.out.println("SSL ServerSocket started on port:  "+port);
            System.out.println(serverSocket.toString());

            socket = serverSocket.accept();
            System.out.println("ServerSocket accepted");

            out = new PrintWriter(socket.getOutputStream(), true);
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));            
                } catch (IOException ex) {
            Logger.getLogger(SecuredSocket.class.getName())
                    .log(Level.SEVERE, null, ex);
        }


    } // end constructor

    public ServerSocket getSSLServerSocket() {
                return this.serverSocket;
    }
    public PrintWriter getOutputStream() {
        return this.out;
    }

    public BufferedReader getInputStream() {
        return this.reader;
    }

} // end class

точка входа сервера, которая имеет main (), находится ниже:

SSLServer. java:

import com.domain.server.*;

public class SSLServer {

    public static void main(String[] args) {

        Server srv = new Server();

        System.out.println("Initializing server: " + srv.getServerName());

        srv.startup();

    }
} // end class

and my small test client:

TestClient.java:

package com.domain.clientt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLSocketFactory;

public class TestClient {

   static final int port = 8888;

   public static void main(String[] args) {

       SSLSocketFactory sslSocketFactory = 
               (SSLSocketFactory)SSLSocketFactory.getDefault();

       try {
           Socket socket = sslSocketFactory.createSocket("localhost", port);
           PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
           try (BufferedReader bufferedReader = 
                   new BufferedReader(
                           new InputStreamReader(socket.getInputStream()))) {
               Scanner scanner = new Scanner(System.in);
               while(true){
                   System.out.println("Enter something:");
                   String inputLine = scanner.nextLine();
                   if(inputLine.equals("q")){
                       break;
                   }

                   out.println(inputLine);
                   System.out.println(bufferedReader.readLine());
               }
           }

        } catch (IOException ex) {
           Logger.getLogger(TestClient.class.getName())
                   .log(Level.SEVERE, null, ex);
       }

   }

}

когда я запускаю эту настройку сервера / клиента, когда в клиенте он возвращает мне просто ноль, а не просто повторяет мне то, что я сказал.

также, на стороне сервера он говорит "клиент вошел: ноль" "снова и снова.

Любая помощь будет принята с благодарностью.

Заранее извиняюсь за плохое форматирование поста или кода, я абсолютно слепой и использую программу для чтения с экрана. Так что иногда это трудно.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...