Объясните слабые места в конструкции Сервера [closed]

Итак, во-первых, это не совсем домашнее задание … но это вопрос из прошлой экзаменационной работы, и я готовлюсь к экзамену и не могу понять этого. (Игнорируйте любой импорт, которого нет здесь)

Также я знаю, что Double — очень плохое имя для класса, не только потому, что это встроенный тип, но и не очень наглядный, но я не думаю, что это принесет какие-либо оценки.

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

Я думаю, это основано исключительно на коде.

В вопросах говорится

The code of a simple server is shown below. It offers the trivial service of accepting an integer
value from a client and returning twice the value received.
Explain the weakness in the design
of the server and re-write it in light of your critique 

После того, как я просмотрел код сам, я не вижу никаких проблем в исходном Server Class насколько я понимаю пока все в порядке.

class DoubleServer{
   private static int port = 1234;       #2
   public static void main(String args[]){
     try{
        ServerSocket serversock = new ServerSocket(port);    #5
        while(true){                                         #6
          Socket socket = serversock.accept();               #7
          new Thread(new Double(socket)).start();            #8
        }
    }catch(IOException e){}
  }
} 

У нас есть

  • В Port создан (изначально я думал, что порт не должен быть частным, но это нормально) # 2
  • В ServerSocket создается и передает порт # 5
  • Цикл продолжения начинает заставлять сервер ждать запросов # 6
  • Socket ожидает получения запроса # 7
  • После отправки запроса он вызывает сервер Thread # 8.

Я не вижу здесь проблем

Затем у нас есть серверный поток

class Double implements Runnable{
    Socket socket;
    public Double(Socket s){socket = s;}
    public void run(){
      try{
         DataInputStream in = new DataInputStream(socket.getInputStream());  
         DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 

         int x = in.readInt();
         out.write(2*x);
         socket.close();
       }
       catch(IOException e){}
    }
}

Вот где проблема

  • Мы упаковали сокет, который прошел, и Data in/out streams
  • Мы читаем int от клиента
  • Я думаю, что проблема в методе out заключается в том, что здесь выполняется вычисление квадрата числа, что я не думаю, что вы можете это сделать, или это плохая практика. Также я бы flush() после записи, чтобы гарантировать запись всех буферизованных байтов.
  • В Socket закрыт, и я бы также закрыл Data in/out streams

Если это неверно, и я что-то упустил, я был бы признателен за помощь или толчок в правильном направлении.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *