2017-02-06 36 views
1

Я создал клиентскую серверную программу в java. Во время запуска программы я должен получить номер порта и IP-адрес, но при запуске Client.java появляется ошибка. Ниже приведены оба моих файла.Ошибка при программировании на клиент-сервер

Server.java

package serverpro; 


import java.io.*; 
import static java.lang.ProcessBuilder.Redirect.to; 
import java.net.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class Server extends Thread { 

public static final int PORT_NUMBER = 12345; 
protected Socket socket; 

public static void main(String[] args) { 
    ServerSocket server = null; 
    try { 
    server = new ServerSocket(PORT_NUMBER); 
    while (true) { 
     new Server(server.accept()); 
    } 
    } 
    catch(IOException ex) { 
    System.out.println("Unable to start server or acccept connections "); 
    System.exit(1); 
    } 
    finally { 
    try { 
     server.close(); 
    } 
    catch(IOException ex) { 
     // not much can be done: log the error 
     // exits since this is the end of main 
    } 
    } 
} 

private Server(Socket socket) { 
    this.socket = socket; 
    start(); 
} 

// the server services client requests in the run method 
    public void run() { 
    InputStream in = null; 
    OutputStream out = null; 

    BufferedReader inReader = new BufferedReader(newInputStreamReader(in)); 
    // the constructor argument “true” enables auto-flushing 
    PrintWriter outWriter = new PrintWriter(out, true); 
    outWriter.println("Echo server: enter bye to exit."); 

    //outWriter.println(“Echo server: enter ‘bye’ to exit.”); 
    while (true) { 
    // readLine blocks until a line-terminated string is available 
    String inLine; 
     try { 
      inLine = inReader.readLine(); 
     } catch (IOException ex) { 
      Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    // readLine returns null if the client just presses <return> 

    try { 
    in = socket.getInputStream(); 
    out = socket.getOutputStream(); 
    // ... do useful stuff ... 
    } 
    catch(IOException ex) { 
    System.out.println("Unable to get Stream from "); 
    } 
    finally { 
    try { 
     in.close(); 
     out.close(); 
     socket.close(); 
    } 
    catch(IOException ex) { 
     // not much can be done: log the error 
    } 
    } 
    } 
    } 
} 

Client.java

package serverpro; 

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

public class Client { 
public static void main(String args[]) throws IOException { 
    new Client(args[0]); 
} 

    public Client(String host) throws IOException { 
    Socket socket; 
    try { 
    socket = new Socket(host, Server.PORT_NUMBER); 
    } 
    catch(UnknownHostException ex) { 
    System.out.println(host + " is not a valid host name."); 
    return; 
    } 
    catch(IOException ex) { 
    System.out.println("Error connecting with" + host); 
    return; 
    } 
    // … initialize model, GUI, etc. ... 
    InputStream in = null; 
    OutputStream out = null; 
    try { 
    in = socket.getInputStream(); 
    out = socket.getOutputStream(); 
    // ... do useful stuff ... 
    } 
    finally { 
    try { 
     in.close(); 
     out.close(); 
     socket.close(); 
    } 
    catch(IOException ex) { 
     // not much can be done ... 
    } 
    } 
} 

}

Вот код ошибки я получаю во время работы Client.java файл

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
at serverpro.Client.main(Client.java:13) 
/Users/Puja Dudhat/Library/Caches/NetBeans/8.2/executor- snippets/run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
+0

при запуске класса Client, пропустите требуемый аргумент командной строки? – saurabh

+0

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

ответ

0

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

public static void main(**String args[]**) throws IOException { 
    new Client(**args[0]**); 
} 
+0

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

+0

, где мне нужно внести изменения. Не могли бы вы сказать подробно. Сегодня мое представление для этого projrct. и я получаю сообщение об ошибке –

0

Ваш код ожидает один аргумент, передаваемый в основной метод, который, кажется, ваш порт клиента, хранится в args[0]. Поэтому вы должны предоставить один из основных методов. Пример для установки порта = 12345:

java Server 12345 

Если вам нужно больше аргументов, (например, значение в args[1]), а затем просто добавить еще один аргумент при запуске основной:

java Server 12345 secondArg 
+0

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

+0

Я уже писал строку. Когда вы запускаете приложение, вам необходимо предоставить аргументы. В моем примере предполагалось, что вы работаете из командной строки. Если вы делаете это из IDE, например Eclipse, вам нужно найти, где в графическом интерфейсе задать аргументы Java Program. Если это другой код, вызывающий основной метод, то ясно, что вызывающему нужно указать аргумент, например, 'new Server (new String [] {12345});' – Keith

+0

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

0

если вы работает как сервер и клиент на одном компьютере, то вы можете передать Localhost как аргумент командной строки

Java Client локальный

В качестве альтернативы, вы можете жестко значение кода хоста (обратите внимание: это не хорошая практика, хотя),

public static void main(String args[]) throws IOException { 
    new Client("localhost"); 
} 

Кроме того, как предложение, вы можете использовать язь, как затмение или IntelliJ отлаживать шаг за шагом кода. вы можете пройти онлайн-видеоуроки для java, и многие из них доступны на youtube

 Смежные вопросы

  • Нет связанных вопросов^_^