2014-12-24 2 views
0

Очень смущенный, я просто разместил этот вопрос, но удалил его, потому что совершил много ошибок. Хорошо, здесь снова идет! У меня есть серверная программа в java ниже. Когда я его запускаю, я ожидаю увидеть какое-то присутствие в netstat, но ничего не вижу. Вот некоторые снимки экрана:ServerSocket не отображается в Netstat?

Перед запуском сервера: https://www.dropbox.com/s/upo9ndbzuxbk9j1/Screenshot%202014-12-24%2002.25.49.png?dl=0

После запуска сервера (сервер работает в верхнем правом терминале, в правом нижнем углу является клиент и, очевидно, осталось только NetStat): https://www.dropbox.com/s/05urjvz3lskvzkc/Screenshot%202014-12-24%2002.28.24.png?dl=0

Несколько долго, но здесь это сервер (я запускаю его с 63400):

import java.net.*; 
import java.io.*; 

public class JavaTest2 { 
    public static void main(String[] args) throws IOException { 

     if (args.length != 1) { 
      System.err.println("Usage: java KnockKnockServer <port number>"); 
      System.exit(1); 
     } 

     int portNumber = Integer.parseInt(args[0]); 

     try (
       ServerSocket serverSocket = new ServerSocket(portNumber); 
       Socket clientSocket = serverSocket.accept(); 
       PrintWriter out = 
         new PrintWriter(clientSocket.getOutputStream(), true); 
       BufferedReader in = new BufferedReader(
         new InputStreamReader(clientSocket.getInputStream())); 
     ) { 

      String inputLine, outputLine; 

      // Initiate conversation with client 
      KnockKnockProtocol kkp = new KnockKnockProtocol(); 
      outputLine = kkp.processInput(null); 
      out.println(outputLine); 

      while ((inputLine = in.readLine()) != null) { 
       outputLine = kkp.processInput(inputLine); 
       out.println(outputLine); 
       if (outputLine.equals("Bye.")) 
        break; 
      } 
     } catch (IOException e) { 
      System.out.println("Exception caught when trying to listen on port " 
        + portNumber + " or listening for a connection"); 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

class KnockKnockProtocol { 
    private static final int WAITING = 0; 
    private static final int SENTKNOCKKNOCK = 1; 
    private static final int SENTCLUE = 2; 
    private static final int ANOTHER = 3; 

    private static final int NUMJOKES = 5; 

    private int state = WAITING; 
    private int currentJoke = 0; 

    private String[] clues = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" }; 
    private String[] answers = { "Turnip the heat, it's cold in here!", 
      "I didn't know you could yodel!", 
      "Bless you!", 
      "Is there an owl in here?", 
      "Is there an echo in here?" }; 

    public String processInput(String theInput) { 
     String theOutput = null; 

     if (state == WAITING) { 
      theOutput = "Knock! Knock!"; 
      state = SENTKNOCKKNOCK; 
     } else if (state == SENTKNOCKKNOCK) { 
      if (theInput.equalsIgnoreCase("Who's there?")) { 
       theOutput = clues[currentJoke]; 
       state = SENTCLUE; 
      } else { 
       theOutput = "You're supposed to say \"Who's there?\"! " + 
         "Try again. Knock! Knock!"; 
      } 
     } else if (state == SENTCLUE) { 
      if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")) { 
       theOutput = answers[currentJoke] + " Want another? (y/n)"; 
       state = ANOTHER; 
      } else { 
       theOutput = "You're supposed to say \"" + 
         clues[currentJoke] + 
         " who?\"" + 
         "! Try again. Knock! Knock!"; 
       state = SENTKNOCKKNOCK; 
      } 
     } else if (state == ANOTHER) { 
      if (theInput.equalsIgnoreCase("y")) { 
       theOutput = "Knock! Knock!"; 
       if (currentJoke == (NUMJOKES - 1)) 
        currentJoke = 0; 
       else 
        currentJoke++; 
       state = SENTKNOCKKNOCK; 
      } else { 
       theOutput = "Bye."; 
       state = WAITING; 
      } 
     } 
     return theOutput; 
    } 
} 

Теперь, когда я запускаю клиента, я могу видеть присутствие в NetStat на самом верху, два сокета, как мой сервер и клиент работает на том же COMPU тер. Но пока еще ни один сервер сокета :(

Скриншот: https://www.dropbox.com/s/bnrbyk41mjob5bg/Screenshot%202014-12-24%2002.25.53.png?dl=0

Код для клиента (бежал с 127.0.0.1 64300):

import java.io.*; 
import java.net.*; 

public class JavaTest { 
    public static void main(String[] args) throws IOException { 

     if (args.length != 2) { 
      System.err.println(
        "Usage: java KnockKnockClient <host name> <port number>"); 
      System.exit(1); 
     } 

     String hostName = args[0]; 
     int portNumber = Integer.parseInt(args[1]); 

     try (
       Socket kkSocket = new Socket(hostName, portNumber); 
       PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true); 
       BufferedReader in = new BufferedReader(
         new InputStreamReader(kkSocket.getInputStream())); 
     ) { 
      BufferedReader stdIn = 
        new BufferedReader(new InputStreamReader(System.in)); 
      String fromServer; 
      String fromUser; 

      while ((fromServer = in.readLine()) != null) { 
       System.out.println("Server: " + fromServer); 
       if (fromServer.equals("Bye.")) 
        break; 

       fromUser = stdIn.readLine(); 
       if (fromUser != null) { 
        System.out.println("Client: " + fromUser); 
        out.println(fromUser); 
       } 
      } 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host " + hostName); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection to " + 
        hostName); 
      System.exit(1); 
     } 
    } 
} 

Спасибо заранее всем, кто занимает время, чтобы понять это !

Я думаю, что это может быть просто netstat, но я все еще хочу знать, почему, когда я запускаю lsof -i: 64300 , он показывает мой java-процесс, когда работает только сервер. И когда я запускаю это со всем, что я см. 3 (как вы можете см. в левом терминале на этом снимке экрана https://www.dropbox.com/s/1focc9dmhkidtan/Screenshot%202014-12-24%2002.52.22.png?dl=0). Я отменяю netstat после того, как он показывает мне, что я думаю, релевантно, потому что я не могу интерпретировать остальное. Я не знаю, есть ли там. Надеюсь, кто-то поможет!

Хорошо, я просто узнаю больше, поскольку я пишу эту причину, я не могу писать в течение 90 минут, но теперь, когда я использую intellij идею и запускаю ее там. Просто сервер, никаких изменений нет, но когда я добавляю клиента, я вижу все!

перед чем: https://www.dropbox.com/s/akupewmprcld0b3/Screenshot%202014-12-24%2002.59.05.png?dl=0

сервер: https://www.dropbox.com/s/uvxmz0jvjozbkyy/Screenshot%202014-12-24%2002.59.34.png?dl=0

клиент + сервер: https://www.dropbox.com/s/bssa16s1n3adwdq/Screenshot%202014-12-24%2003.00.00.png?dl=0

Что происходит .... Я также вижу 6 localhosts вместо 3 ... Бог это интересно, или я просто делаю одну очень глупую ошибку. Но я начинаю сомневаться в любом из этих вопросов.

+3

netstat отключает прослушивающие сокеты по умолчанию. Для всех сокетов есть опция -l или -all. – laune

+0

Я не эксперт 'netstat', но я заметил, что ваш список netstat имеет название« Active Internet connections ». Возможно, сервер, который только слушает, еще не «активен»? – markspace

+2

Похоже, я получил его в одном. Первый комментарий указывает на другое решение: убедитесь, что вы прочитали документацию по используемым инструментам, чтобы вы знали, как они на самом деле работают. – markspace

ответ

0

netstat отключает прослушивающие сокеты по умолчанию. Для всех сокетов есть опция -l или -all. - laune