Błąd odbierania danych.

0

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ć.

0

Wywal te metody writeObject() i readObject() to raz.
Dwa użyj debuggera i zobacz gdzie jest bląd.

0

Pomoże ktoś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1