Cześć, probuje odpalic program ktory mam na zaliczenie klient-serwer quiz. Mam takie klasy + błąd na końcu. Czy mógłby ktoś pomóc? Z góry dzięki wielkie.
package com.student.lab3;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class AppWindow {
private JFrame frame;
//Stworzenie aplikacji.
public AppWindow() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Uruchomienie aplikacji
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AppWindow window = new AppWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Klasa Client
package com.student.lab3;
import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Client {
private Socket _clientSocket;
private static InetAddress _hostName;
private static int _tcpPort;
private JFrame frame;
private JTextField textField;
JTextArea textArea;
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnKonfiguracja = new JMenu("Start ");
menuBar.add(mnKonfiguracja);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("Port nasluchu:");
lblNewLabel.setBounds(10, 0, 91, 24);
frame.getContentPane().add(lblNewLabel);
textField = new JTextField();
textField.setBounds(96, 2, 41, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
textArea = new JTextArea();
textArea.setBounds(0, 169, 424, 72);
frame.getContentPane().add(textArea);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBounds(10, 169, 414, 72);
frame.getContentPane().add(scrollPane);
JLabel lblNewLabel_1 = new JLabel("Adres serwera:");
lblNewLabel_1.setBounds(20, 35, 104, 50);
frame.getContentPane().add(lblNewLabel_1);
}
public Client(InetAddress hostName, int tcpPort) {
initialize();
_hostName = hostName;
_tcpPort = tcpPort;
}
public void connect() {
// tworzymy socket klienta
try {
_clientSocket = new Socket(_hostName, _tcpPort);
} catch (IOException e) {
//Coś poszło nie tak z połączeniem do serwera
e.printStackTrace();
}
System.out.println("Host " + _hostName + " podłączony do serwera!");
}
/**
* Wysyła wiadomość użytkownika do serwera
*
* @param command
*/
public void sentUserInput(String command) {
String userInput;
PrintWriter writer;
BufferedReader in;
// System.out.println("sui in");
//drukujemy
try {
// System.out.println("ui try start");
writer = new PrintWriter(new OutputStreamWriter(_clientSocket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Czekam na odpowiedź: ");
if(command == "")
userInput = in.readLine();
else
userInput = command;
writer.write(userInput);
// System.out.println("ui wr");
writer.println();
writer.flush();
System.out.print("\n");
} catch (IOException e) {
// System.out.println("Drukowanie failed");
e.printStackTrace();
}
}
/**
* Odczytuje odpowiedź z serwera
*
* @param printToConsole
* @return odpowiedź z serwera
*/
public String readServerResponse(boolean printToConsole) {
BufferedReader in;
String serverResponse;
String feed;
// System.out.println("rsr in");
//odbieram odpowiedź z serwera
try {
// System.out.println("rsr in try");
in = new BufferedReader(new InputStreamReader(_clientSocket.getInputStream()));
// System.out.println("rsr in after try");
while ((serverResponse = in.readLine()) != null) {
feed = serverResponse.replace("+","\n");
// System.out.println("feed:" + feed +"|");
// System.out.println("rsr in after try2");
if(printToConsole)
System.out.println(feed);
break;
}
// System.out.println("rsr rtrn: " + serverResponse);
return serverResponse;
} catch (IOException e) {
serverResponse = "ioexception";
// System.out.println("Nie udało się odczytać odpowiedzi");
e.printStackTrace();
}
return serverResponse;
}
/**
* Zamyka socket klienta
*/
public void close() {
System.out.println("Połączenie zamknięte.");
//zamykamy wątek klienta
try {
_clientSocket.close();
} catch (IOException e) {
// System.out.println("Nie zamknięto połączenia");
e.printStackTrace();
}
}
/**
* MAIN
*
* @param args
*/
public static void main(String args[]) {
//Tworzę obiekt klienta
Client client = new Client(_hostName, _tcpPort);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
client.frame.setVisible(true);
client.textField.setText(""+Integer.parseInt(args[1]));
} catch (Exception e) {
e.printStackTrace();
}
}
});
if (args.length < 2)
System.out.println("Wprowadź adres serwera TCP oraz numer portu");
else {
try {
_hostName = InetAddress.getByName(args[0]);
_tcpPort = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
System.err.println("Wprowadź poprawny numer portu: " + e);
return;
} catch (UnknownHostException e) {
e.printStackTrace();
return;
}
try {
String isKilled;
//Tworzę obiekt klienta
// client = new Client(_hostName, _tcpPort);
//Łącze się z serwerem
client.connect();
for(int i=0; i<4; i++) {
//Initial read server response
client.readServerResponse(true);
// System.out.println("Po initial rsr");
//Pytam serwer
// System.out.println("do sui przed");
client.sentUserInput("");
//Odczytuje odpowiedź
// System.out.println("do rsr przed");
isKilled = client.readServerResponse(false);
if(isKilled.equals("kill")) {
System.out.println("petla for STOP");
break;
}
// System.out.println("AMEN");
}
client.textArea.append("Test zakończony\n");
//Zamykam połączenie
client.close();
} catch (Exception e) {
//Inne błędy nie wyłapane przez bloki try w metodach
e.printStackTrace();
}
}
}
}
package com.student.lab3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class Jdbc {
private static Properties connectionProps;
public Jdbc() {
connectionProps = new Properties();
connectionProps.put("user", "root");
connectionProps.put("password", "");
if (ladujSterownik())
System.out.println("-> sterownik OK");
else
System.exit(1);
}
/**
* Metoda ładuje sterownik jdbc
*
* @return true/false
*/
public static boolean ladujSterownik() {
// LADOWANIE STEROWNIKA
System.out.println("Sprawdzanie sterownika:");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
return true;
} catch (Exception e) {
System.out.println("Blad przy ladowaniu sterownika bazy!");
return false;
}
}
/**
* Metoda służy do nawiązania połączenia z bazą danych
*
* @return połączenie z bazą
*/
public static Connection connectToDatabase(String adress, int port, String dataBaseName) {
System.out.println("Łączenie z bazą danych tcpbaza");
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://" + adress + ":" + port + "/" + dataBaseName, connectionProps);
} catch (SQLException e) {
System.out.println("Błąd przy ładowaniu sterownika bazy");
System.exit(1);
}
return connection;
}
/**
* Metoda służy do połączenia z MySQL bez wybierania konkretnej bazy
*
* @return referencja do uchwytu bazy danych
*/
public static Connection getConnection(String adres, int port) {
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://" + adres + ":" + port + "/", connectionProps);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Połączono z bazą danych!");
return connection;
}
public static Statement createStatement(Connection connection) {
try {
return connection.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
;
return null;
}
/**
* Zamykanie połączenia z bazą danych
*
* @param connection - połączenie z bazą
* @param s - obiekt przesyłający zapytanie do bazy
*/
public static void closeConnection(Connection connection, Statement s) {
System.out.println("Zamykanie połączenia z bazą");
try {
s.close();
connection.close();
} catch (SQLException e) {
System.out.println("Bląd przy zamykaniu polączenia " + e.toString());
System.exit(4);
}
System.out.println("-> zamknięcie OK");
}
/**
* Metoda służy do wywoływania zapytań do bazy danych
*
* @return -1 jeśli operacja się nie powiodła
*/
public static int executeUpdate(Statement s, String sql) {
try {
return s.executeUpdate(sql);
} catch (SQLException e) {
// e.printStackTrace();
} catch (Exception e){
// System.out.println("ERROR: Wystąpił inny błąd");
// return -1;
}
return -1;
}
}
package com.student.lab3;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class PrepareDataInDB extends Jdbc {
Connection connection;
List<String> questions = new ArrayList<>();
List<String> goodAnswers = new ArrayList<>();
public PrepareDataInDB() throws SQLException {
super();
// Connection connection = connectToDatabase("127.0.0.1","hotel", "root", "root");
connection = getConnection("localhost", 3306);
if (connection != null) {
System.out.println("-> połączenie OK");
}
// WYKONYWANIE OPERACJI NA BAZIE DANYCH
System.out.println("Pobieranie danych z bazy");
Statement st = createStatement(connection);
// utworzenie bazy
if (executeUpdate(st, "CREATE DATABASE tcpBaza;") != -1)
System.out.println("Baza utworzona");
else
System.out.println("Baza nieutworzona! Pewnie istnieje.");
if (executeUpdate(st, "USE tcpBaza;") != -1)
System.out.println("Baza wybrana");
else
System.out.println("Baza niewybrana!");
if (executeUpdate(st, "CREATE TABLE questions(id INT NOT NULL, question VARCHAR(254) NOT NULL);") != -1 &&
executeUpdate(st, "CREATE TABLE userAnswers(niu INT NOT NULL, questionNr INT NOT NULL, answer VARCHAR(254) NOT NULL);") != -1 &&
executeUpdate(st, "CREATE TABLE goodAnswers(id INT NOT NULL, answer VARCHAR(254) NOT NULL);") != -1 &&
executeUpdate(st, "CREATE TABLE userScore(niu INT NOT NULL, score INT NOT NULL);") != -1
)
System.out.println("Tabela utworzona!");
else {
System.out.println("Tabela nie utworzona! Pewnie istnieje.");
executeUpdate(st, "TRUNCATE questions;");
executeUpdate(st, "TRUNCATE goodAnswers;");
}
//WRZUCAM DANE DO BAZY
questions.add("INSERT INTO questions (id, question) VALUES (1, \"Jakie zwierze ma Ala?+1 Psa+2_Kota+3 Warana+4 Surikatke\")");
goodAnswers.add("INSERT INTO goodanswers (id, answer) VALUES (1, \"2\")");
questions.add("INSERT INTO questions (id, question) VALUES (2, \"Ile jest miesiecy w roku?+1 10+2 24+3_12+4 30\")");
goodAnswers.add("INSERT INTO goodanswers (id, answer) VALUES (2, \"3\")");
questions.add("INSERT INTO questions (id, question) VALUES (3, \"W ktorym roku byla bitwa pod Cedynia?+1_972+2 966+3 1410+4 1610\")");
goodAnswers.add("INSERT INTO goodanswers (id, answer) VALUES (3, \"1\")");
questions.add("INSERT INTO questions (id, question) VALUES (4, \"Jaka jest liczba atomowa tlenu?+1 1+2 5+3_8+4 10\")");
goodAnswers.add("INSERT INTO goodanswers (id, answer) VALUES (4, \"3\")");
for(String query : questions){
st.executeUpdate(query);
}
for(String query : goodAnswers){
st.executeUpdate(query);
}
//ZAMYKAM POŁACZENIE
closeConnection(connection, st);
}
}
package com.student.lab3;
/**
* Klasa stosowana jako typ pomocniczy
*/
public class Response {
private String _userAnswer;
private boolean _exitTest;
private int score;
public String getUserAnswer() {
return _userAnswer;
}
public void setUserAnswer(String userAnswer) {
_userAnswer = userAnswer;
}
public boolean getExitTest() {
return _exitTest;
}
public void setExitTest(boolean exitTest) {
_exitTest = exitTest;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
package com.student.lab3;
import java.awt.EventQueue;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import javax.swing.JFrame;
import com.student.lab3.ServerThread;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
* Serwer TCP aplikacji
*/
public class Server {
static ServerSocket serverSocket;
private static int _tcpPort;
private static int _NIU = 0;
public static PrepareDataInDB prepareData;
private JFrame frame;
private JTextField textField;
JTextArea textArea;
/**
* Create the application.
*/
public Server() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnKonfiguracja = new JMenu("Konfiguracja");
menuBar.add(mnKonfiguracja);
JMenu mnDodajPytania = new JMenu("Dodaj pytania");
menuBar.add(mnDodajPytania);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("Port nasluchu:");
lblNewLabel.setBounds(10, 0, 91, 24);
frame.getContentPane().add(lblNewLabel);
textField = new JTextField();
textField.setBounds(96, 2, 41, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
textArea = new JTextArea();
textArea.setBounds(0, 169, 424, 72);
frame.getContentPane().add(textArea);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBounds(10, 169, 414, 72);
frame.getContentPane().add(scrollPane);
}
public Server(int tcpPort) {
_tcpPort = tcpPort;
}
public void startServerSide() throws SQLException {
ExecutorService exec = Executors.newCachedThreadPool();
Callable<Integer> callable = null;
System.out.println("####### CZĘŚĆ JDBC #######");
//wrzucam pytania i odpowiedzi do bazy
prepareData = new PrepareDataInDB();
System.out.println("####### CZĘŚĆ JDBC #######\n");
System.out.println("####### CZĘŚĆ TCP #######");
try {
//hello world serwerze
System.out.println("Serwer startuje na porcie " + _tcpPort);
// tworzę socket serwera
serverSocket = new ServerSocket(_tcpPort);
} catch (IOException e) {
//nie udało się wystartować
e.printStackTrace();
return;
}
//tworzę socket dla klienta
Socket client = null;
while(true) {
//czekam na zgłoszenie klienta ...
System.out.println("Czekam na zgłoszenie usera...");
//jest klient, akceptuje...
try {
client = serverSocket.accept();
} catch (IOException e) {
//akceptacja nie powiodła się
e.printStackTrace();
return;
}
//zaakceptowany, generuje NIU
int niu = ++_NIU;
System.out.println("[NIU: " + niu + "] Nowy user z adresem IP: " + client.getInetAddress());
//klient podłączony, startuje wątek callable
callable = new ServerThread(niu, client);
try {
exec.execute( new FutureTask<Integer>(callable) {
public void done() {
System.out.println("[NIU: " + niu + "] Callable - test zakończony");
}
});
// System.out.println("Wynik testu: " + result + "pkt.");
// exec.shutdown();
} catch (Exception e) {
// e.printStackTrace();
}
}
}
/**
* MAIN
*
* @param args
* @throws SQLException
*/
public static void main(String args[]) throws SQLException {
Server window = new Server();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
window.frame.setVisible(true);
window.textField.setText(""+Integer.parseInt(args[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
});
if (args.length == 0)
System.out.println("Wprowadź numer portu, na którym serwer będzie oczekiwał na userów");
else {
_tcpPort = 0;
try {
_tcpPort = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.err.println("Wprowadź poprawny numer portu: " + e);
return;
}
//Jeśli powyższe się powiodło, można startować serwer
try {
Server server = new Server(_tcpPort);
// server.startServerSide();
//zamknięcie strumieni i połączenia jest w kliencie
} catch (Exception e) {
System.err.println(e);
e.printStackTrace();
}
ExecutorService exec = Executors.newCachedThreadPool();
Callable<Integer> callable = null;
window.textArea.append("####### CZĘŚĆ JDBC #######\n");
// System.out.println("####### CZĘŚĆ JDBC #######");
//wrzucam pytania i odpowiedzi do bazy
prepareData = new PrepareDataInDB();
window.textArea.append("####### CZĘŚĆ JDBC #######\n\n");
window.textArea.append("####### CZĘŚĆ TCP #######\n");
try {
//hello world serwerze
window.textArea.append("Serwer startuje na porcie " + _tcpPort+"\n");
// tworzę socket serwera
serverSocket = new ServerSocket(_tcpPort);
} catch (IOException e) {
//nie udało się wystartować
e.printStackTrace();
return;
}
//tworzę socket dla klienta
Socket client = null;
while(true) {
//czekam na zgłoszenie klienta ...
window.textArea.append("Czekam na zgłoszenie usera...\n");
//jest klient, akceptuje...
try {
client = serverSocket.accept();
} catch (IOException e) {
//akceptacja nie powiodła się
e.printStackTrace();
return;
}
//zaakceptowany, generuje NIU
int niu = ++_NIU;
window.textArea.append("[NIU: " + niu + "] Nowy user z adresem IP: " + client.getInetAddress()+"\n");
//klient podłączony, startuje wątek callable
callable = new ServerThread(niu, client);
try {
exec.execute( new FutureTask<Integer>(callable) {
public void done() {
window.textArea.append("[NIU: " + niu + "] Callable - test zakończony\n");
}
});
// System.out.println("Wynik testu: " + result + "pkt.");
// exec.shutdown();
} catch (Exception e) {
// e.printStackTrace();
}
}
}
}
}
package com.student.lab3;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import com.student.lab3.Response;
/**
* Klasa implementująca interfejs Callable
* Tworzona w wątku dla podłączonych userów
*/
public class ServerThread implements Callable<Integer> {
private Socket _mySocket;
private int _NIU;
List<String> questions = new ArrayList<>();
List<String> userAnswers = new ArrayList<>();
List<String> goodAnswers = new ArrayList<>();
private Connection _connection;
public ServerThread(int niu, Socket socket) {
super(); // konstruktor
_mySocket = socket;
_NIU = niu;
_connection = Jdbc.connectToDatabase("localhost", 3306,"tcpbaza");
}
@Override
public Integer call() { // program wątku
Response result = null;
try {
// readQuestions();
System.out.println("[NIU: " + _NIU + "] Mam nowy wątek " + Thread.currentThread().getName());
do {
result = doTest();
} while(result.getExitTest());
} catch (IOException e) {
System.err.println(e);
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
_connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result.getScore();
}
/**
* Metoda walidująca odpowiedź usera
* Zapisuje odpowiedź do pliku.
*
* @param questionNumber
* @param answer
* @return true jeśli odpowiedź usera była dobra
*/
private boolean processAnswer(int questionNumber, String answer)
throws FileNotFoundException, UnsupportedEncodingException {
// PrintWriter answers = new PrintWriter("bazaOdpowiedzi.txt", "UTF-8");
// PrintWriter answers = new PrintWriter(new FileOutputStream(new File("bazaOdpowiedzi.txt"), true));
Statement st = Jdbc.createStatement(_connection);
boolean isGoodAnswer = false;
// answers.println("[NIU: " + _NIU + "] Pytanie " + (questionNumber+1) + ": " + answer);
// if(goodAnswers.get(questionNumber).equals(answer.toString()))
// isGoodAnswer = true;
// answers.close();
if (_connection != null) {
Jdbc.executeUpdate(st, "INSERT INTO useranswers (niu, questionNr, answer) "
+ "VALUES (" + _NIU + ", " + (questionNumber+1) + ", '" + answer + "');");
try {
ResultSet rs = st.executeQuery("SELECT answer FROM goodanswers WHERE id = " + (questionNumber+1) + ";");
if(rs.next()) {
if(rs.getString(1).equals(answer.toString()))
isGoodAnswer = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
} else
System.out.println("Obsługa odpowiedzi nie powiodła się.");
return isGoodAnswer;
}
/**
* Metoda zapisuje wynik usera w pliku tekstowym
*
* @param score
*/
private void saveScore(int score)
throws FileNotFoundException, UnsupportedEncodingException {
// PrintWriter results = new PrintWriter("wyniki.txt", "UTF-8");
// PrintWriter results = new PrintWriter(new FileOutputStream(new File("wyniki.txt"), true));
Statement st = Jdbc.createStatement(_connection);
// results.println("[NIU: " + _NIU + "] Wynik testu: " + score);
// results.close();
if (_connection != null) {
Jdbc.executeUpdate(st, "INSERT INTO userscore (niu, score) " + "VALUES (" + _NIU + ", " + score + ");");
}
}
/**
* Metoda przeprowadzająca test z userem
*
* @return true jeśli test trwa
*/
private Response doTest() throws IOException, InterruptedException, SQLException {
Response response = null;
int studentScore = 0;
boolean isGoodAnswer = false;
Statement st = Jdbc.createStatement(_connection);
ResultSet rs = null;
if (_connection != null) {
try {
rs = st.executeQuery("SELECT question FROM questions;");
} catch (SQLException e) {
e.printStackTrace();
}
}
for(int i=0; i < 4; i++){
if(rs.next()) {
createServerResponse(rs.getString(1));
}
// System.out.println("question " + i + " sent");
response = readClientResponse();
// System.out.println("[NIU: " + _NIU + "] Odebrałem odp od usera " + response.getUserAnswer());
createServerResponse(response.getUserAnswer());
isGoodAnswer = processAnswer(i, response.getUserAnswer());
if(isGoodAnswer)
studentScore++;
if(response.getExitTest() == false)
break;
// Thread.currentThread();
// Thread.sleep(1000);
}
response.setExitTest(false);
response.setScore(studentScore);
saveScore(studentScore);
// System.out.println("[NIU: " + _NIU + "] Zakończono test.");
return response;
}
/**
* Odczyt odpowiedzi od "klienta" TCP
*
* @return wiadomość od klienta TCP
*/
private Response readClientResponse() throws IOException, InterruptedException {
Response response = new Response();
BufferedReader stdIn = new BufferedReader(new InputStreamReader(_mySocket.getInputStream()));
// System.out.println("enter rcp");
String userInput = stdIn.readLine();
// String userInput;
// System.out.println("enter rcp2");
// while ((userInput = stdIn.readLine() ) != null) {
while (userInput != null) {
// System.out.println("enter rcp whi");
System.out.println("[NIU: " + _NIU + "] Pobrałem odpowiedź od usera " + userInput);
if(userInput.equals("kill")){
// createServerResponse("kill");
response.setExitTest(false);
response.setUserAnswer(userInput);
System.out.println("[NIU: " + _NIU + "] Żądanie KILL. Przerywam.");
break;
} else {
// createServerResponse(userInput);
response.setUserAnswer(userInput);
response.setExitTest(true);
break;
}
}
return response;
}
/**
* Metoda wysyła odpowiedź z serwera
*
* @param userInput
*/
private void createServerResponse(String param) throws IOException, InterruptedException {
OutputStreamWriter osw = new OutputStreamWriter(_mySocket.getOutputStream());
PrintWriter writer = new PrintWriter(osw);
if(param.equals("kill")){
writer.write("kill");
} else {
writer.write(param);
}
// System.out.println("Odpowiedź z serwera: " + param);
// writer.write(param);
writer.println();
writer.flush();
}
}
Wywala taki błąd
Wprowadź numer portu, na którym serwer będzie oczekiwał na userów
java.lang.ArrayIndexOutOfBoundsException: 0
at com.student.lab3.Server$2.run(Server.java:156)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)