2017-02-06 32 views
1

Я пишу свою первую клиентскую/серверную программу java, которая только устанавливает соединение с сервером, и когда я запускаю IP-адрес программы, и номер порта должен быть напечатан. но когда я запускаю серверную программу, я получаю сообщение об ошибке.Когда я запускаю клиент-серверную программу, я получаю ArrayIndexOutofBoundException

Server.java

package serverpro; 
import java.io.*; 
import java.net.*; 

public class Server{ 
static InetAddress ip; 
public static final String HOST="localhost"; 
public static final int PORT= 4444; 


public static void main(String a[]) throws Exception { 
System.out.println("starting server.."); 
System.out.println("Initializing Connection.."); 

try (
     ServerSocket serverSocket = new ServerSocket(PORT); 
     Socket clientSocket = serverSocket.accept(); 

     //BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     //PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
) { 
    ip = InetAddress.getLocalHost(); 
    System.out.println("InetAdress " + ip.getHostAddress() + " : " + clientSocket.getPort()); 


} catch (Exception e) { 
    System.err.println("Exception in starting server: " + e.getMessage()); 
} 
} 
} 

Client.java

package serverpro; 

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

public class Client { 
public static void main(String[] args) throws IOException { 
try (
     Socket client = new Socket(Server.HOST, Server.PORT); 
     PrintWriter out = new PrintWriter(client.getOutputStream(), true); 

     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
) { 
    String inputLine; 
    while ((inputLine = stdIn.readLine()) != null) { 

     if ("exit".equals(inputLine)) { 
      out.println("exit"); 
      break; 
     } 

     out.println(inputLine); 
     out.flush(); 

     final String response = in.readLine(); 
     System.out.println(response); 
    } 
} catch (UnknownHostException e) { 
    System.err.println("Don't know about host: localhost."); 
    System.exit(1); 
} catch (IOException e) { 
    System.err.println("Couldn't get I/O for the connection to: localhost."); 
    System.exit(1); 
} 

}}

Теперь Когда я бегу ServerProgram первым я получаю ниже выхода

пробег:

Entered server console.. 
Initializing Connection.. 

, но когда я запускаю клиента выхода, то он показывает нулевую

пробег:

+0

Вероятно, вы не прошли порт (аргумент командной строки) для GreetingServer во время работы. –

+0

Можете ли вы написать целую строчку, чтобы я мог понять. Как написать номер порта? –

+0

как вы его используете? через командную строку или некоторую среду IDE? –

ответ

0

Я думаю, вы не запускать программу с любыми аргументами, так что ваш args массив пуст. Запустите программу с помощью аргументов или найдите другой способ получить имя и порт сервера.

+0

Можете ли вы предложить мне способ, чтобы он начинался автоматически без аргументов? –

+0

@poojagajera Использование файла свойств. –

+0

Нет, я не получаю, напишите ли вы код, чтобы я мог понять.спасибо –

-1

Попробуйте

java -cp /path/toCompiled/code greetingserver.GreetingClient serverName 8080 

должен напечатать «Подключение к ServerName на порту 8080

+0

Когда я запускаю свой номер порта программы, и IP-адрес должен автоматически не писать через cmd. он должен работать только в IDE –

+0

Я внес изменения в код, см. мой код выше. но все же я не получаю вывод, как ожидалось, - –

0

Я не получил ничего из вашего описания, но если вы хотите, чтобы ваш сервер ответить, что вы Уилла Райта в командной строке вы следует изменить «in.readLine»

while (x) { 
     reply= stdIn.readLine(); 
     if(reply!=null) 
     { 
      x=false; 
     } 
    } 

Кроме того, если вы хотите, IP- адреса и порта, который будет напечатан, вы должны напечатать его, лол

System.out.println("InetAdress " + echoSocket.getInetAddress() + ":" + echoSocket.getPort()); 
+0

В каком файле мне нужно внести это изменение. сервера или клиента? –

+0

На сервере. После объявления _BufferedReader stdIn_. Думаю, вы просто перепутали свой _in_ bufferedReader и _stdIn_ BufferedReader. –

+0

Можете ли вы написать целую кучу кода, чтобы я мог лучше узнать –

0

проверить это

public class Server { 
    public static final String HOST="localhost"; 
    public static final int PORT= 4444; 

public static void main(String a[]) throws Exception { 
    System.out.println("starting server.."); 
    System.out.println("Initializing Connection.."); 
    try (
      ServerSocket serverSocket = new ServerSocket(PORT); 
      Socket clientSocket = serverSocket.accept(); 

      BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
    ) { 
     System.out.println("start"); 
     System.out.println("client: " + clientSocket.getInetAddress().getHostAddress()); 

     while (true) { 
      System.out.println("waiting request..."); 
      final String request = in.readLine(); 

      if ("exit".equals(request)) { 
       System.out.println("exit command"); 
       break; 
      } 
      System.out.println("received: " + request); 
      final String response = "server:" + request; 
      out.println(response); 

      System.out.println("sent back: " + response); 
     } 

    } catch (Exception e) { 
     System.err.println("Exception in starting server: " + e.getMessage()); 
    } 
} 

}

public class Client { 

public static void main(String[] args) throws IOException { 
    try (
      Socket client = new Socket(Server.HOST, Server.PORT); 
      PrintWriter out = new PrintWriter(client.getOutputStream(), true); 
      BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
    ) { 
     String inputLine; 
     while ((inputLine = stdIn.readLine()) != null) { 

      if ("exit".equals(inputLine)) { 
       out.println("exit"); 
       break; 
      } 

      out.println(inputLine); 
      out.flush(); 

      final String response = in.readLine(); 
      System.out.println(response); 
     } 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host: localhost."); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for the connection to: localhost."); 
     System.exit(1); 
    } 
} 

}

+0

Hiii, когда я запускаю программу, я должен автоматически получить IP-адрес и номер порта без ввода вручную. здесь это не работает. –

+0

, когда я запускаю свою программу. Мне нужно получить имя сервера и номер порта –

+0

HI Что вы имеете в виду без ввода вручную? передача хоста/порта через аргументы программы? – DanikX