Попытка получить новый ServerSocket для открытия не удалась - PullRequest
0 голосов
/ 06 мая 2018

Учитель дал мне код, указанный ниже. Я запускал его один или два раза, и он работал нормально. Однако я внезапно не могу заставить его работать из командной строки на Windows 8 больше. Независимо от того, какой порт я укажу, он просто печатает «Открытие порта ...» и никогда не продолжается. Не исключение никогда не выбрасывается. Я отключил брандмауэр и антивирус, и он не работает. Я добавил оператор print в качестве первой строки блока try catch, и он будет печататься, но он не создаст новый сокет. Я уверен, что это что-то в моих настройках Windows, но я не уверен, что или как решить это.

// Server program
// File name: "TCPServer.java"

import java.io.*;
import java.net.*;
public class TCPServer
{
     private static ServerSocket servSock;
     public static void main(String[] args)
    {
        System.out.println("Opening port...\n");
        try{

       // Create a server object 
              servSock = new ServerSocket(Integer.parseInt(args[0])); 
        }

        catch(IOException e){
             System.out.println("Unable to attach to port!");
             System.exit(1);
        }

       do 
       {  
            run();
       }while (true);

    }

    private static void run()
   {
        Socket link = null; 
        try{



        // Put the server into a waiting state
               link = servSock.accept(); 

        // Set up input and output streams for socket
              BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream())); 
              PrintWriter out = new PrintWriter(link.getOutputStream(),true);

    // print local host name
              String host = InetAddress.getLocalHost().getHostName();
              System.out.println("Client has estabished a connection to " + host);

    // Receive and process the incoming data 
             int numMessages = 0;
             String message = in.readLine(); 
             while (!message.equals("DONE"))
             {
                 System.out.println(message);
                 numMessages ++;
                 message = in.readLine();
             }

      // Send a report back and close the connection
            out.println("Server received " + numMessages + " messages"); 
      }

      catch(IOException e){
          e.printStackTrace();
      }

      finally{
           try{
                System.out.println("!!!!! Closing connection... !!!!!\n" + "!!! Waiting for the next connection... !!!");
                link.close(); 
           }

           catch(IOException e){
                 System.out.println("Unable to disconnect!");
                System.exit(1);
           }
    }

  }

}

1 Ответ

0 голосов
/ 06 мая 2018

Этот код работает нормально. Проблема в коде для клиента. Ответ на вашу проблему уже написан в комментарии в вашем коде.

    // Put the server into a waiting state
           link = servSock.accept(); 

Сервер переходит в состояние ожидания, пока не будет установлено соединение. Клиент - это тот, кто получит ошибку, поскольку он не подключился. Если клиент работает правильно, код продолжится, и вы получите дополнительный вывод.

...