Witam. Piszę program, który ma przesyłać dane między sobą klientem a serwerm:
JFrame serwera z konstruktorem, w którym jest uruchamiany wątek odpowiedzialny za wysyłanie i odbieranie danych:
public class Serwer extends javax.swing.JFrame {
static String login;
static String haslo;
static BazaDanych bd;
/**
* Creates new form Serwer
*/
public Serwer(String x, String y, BazaDanych z) {
super("Serwer");
login = x;
haslo = y;
bd = z;
initComponents();
this.setSize(700, 500);
this.setVisible(true);
setLocationRelativeTo(null);
Thread t = new Thread(new Start());
t.start();
}
public class Start implements Runnable {
int port = 5500;
Dane d;
public void run() {
try {
ObjectInputStream ois;
ObjectOutputStream oos;
ServerSocket serverSocket = new ServerSocket(5500);
Socket sock;
while (true) {
sock = serverSocket.accept();
ois = new ObjectInputStream(sock.getInputStream());
oos = new ObjectOutputStream(sock.getOutputStream());
d = (Dane) ois.readObject();
if (d.wiadomosc.equals("Logowanie")) {
String log = d.login;
String has = d.haslo;
String wynik = bd.logowanie(log, has);
if (log.equals("admin")) {
System.out.println("Zalogowano jako admin");
d.typ = wynik;
oos.writeObject(d);
}
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Bład: " + e.getMessage());
}
}
}
Klasa dane, która jest przesyłana:
package klient;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
public class Dane implements Serializable{
String wiadomosc;
String imie;
String nazwisko;
String login;
String haslo;
String typ;
int id;
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
}
}
Klient:
if(jTextField1.getText().equals("") || jPasswordField1.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Wypełnji wszystkie pola", "Błąd", JOptionPane.ERROR_MESSAGE);
} else {
int port = 5500;
String adresip = "127.0.0.1";
try {
String imie;
String nazwisko;
Socket socket = new Socket(adresip, port);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Dane d = new Dane();
d.wiadomosc = "Logowanie";
d.login = jTextField1.getText();
d.haslo = jPasswordField1.getText();
oos.writeObject(d);
d = (Dane)ois.readObject();
imie = d.imie;
nazwisko = d.nazwisko;
if(d.typ.equals("admin")) {
new PanelAdmina(imie, nazwisko).setVisible(true);
}
oos.close();
ois.close();
socket.close();
}
catch(Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
this.setVisible(false);
}
Przy uruchomieniu wywala mi błąd w serwerze, ale
JOptionPane.showMessageDialog(null, "Bład: " + e.getMessage()
daje tylko Błąd Klient.Dane
Czyli błąd jest gdzieś w tym miejscu w serwerze d = (Dane) ois.readObject(); tylko nie wiem dlaczego? Przecież klient przesyła dane, to serwer powinien je odebrać.