Wysylanie objektow przez sockety

0

Witam,
mam problem, próbuje przesłać obiekt od klienta do serwera i od serwera do klienta i ta pierwsza opcja wychodzi bez problemu, ale z ta druga się męczę i coś mi ciągle nie działa, mógłby mi ktos pomóc.
Poki co to jest mój kod:

KLASA CLIENT:

public class Client
{
	Socket socket = null;
	private ObjectOutputStream oos = null;
	private ObjectInputStream ois = null;

	Client(int port)
	{
		try
		{
		
			socket = new Socket("localhost", port);
			oos = new ObjectOutputStream(socket.getOutputStream());
			ois = new ObjectInputStream(socket.getInputStream());

		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	void Wysylanie(Osoba A)
	{
		try
		{
			oos.writeObject(A);
			oos.close();
		
		} catch (IOException e)
		{
			e.printStackTrace();
		}

	}

}

KLASA SERVER:

public class Server extends Thread
{
	private ServerSocket serverSocket;
	ObjectInputStream ois = null;
	ObjectOutputStream oos = null;

	public Server(int port)
	{
		try
		{
			serverSocket = new ServerSocket(port);
	
		} catch (IOException e)
		{
			
			e.printStackTrace();
		}

	}

	public void run()
	{

		while (true)
		{
			try
			{
				System.out.println("Waiting for client ");
				Socket server = serverSocket.accept();
				
				ois = new ObjectInputStream(server.getInputStream());
				oos = new ObjectOutputStream(server.getOutputStream());
				
				Osoba B = (Osoba) ois.readObject();
				System.out.println(B.imie);
				System.out.println(B.nr);

				oos.close();
				ois.close();
				server.close();
			} catch (IOException e)
			{
				e.printStackTrace();
				break;
			} catch (ClassNotFoundException e)
			{
				
				e.printStackTrace();
			}
		}
	}
}

WYWOLANIE:

if(source ==bServer)
		{
			
			System.out.println("Server");
			Thread thread1 = new Server(123);
			thread1.start();
			
		}
		if(source ==bClient)
		{
			System.out.println("Client");
			Client client1 = new Client(123);
			Osoba A = new Osoba("Rafal", 5);
			client1.Wysylanie(A);
		}
1

No jak pozamykasz strumienie to juz nic nimi nie odbierzesz. Pokaż kod który ci nie działa.

0

KLASA SERVER:

public class Server extends Thread
{
    private ServerSocket serverSocket;
    ObjectInputStream ois = null;
    ObjectOutputStream oos = null;
 
    public Server(int port)
    {
        try
        {
            serverSocket = new ServerSocket(port);
 
        } catch (IOException e)
        {
 
            e.printStackTrace();
        }
 
    }
 
    public void run()
    {
 
        while (true)
        {
            try
            {
                System.out.println("Waiting for client ");
                Socket server = serverSocket.accept();
 
                ois = new ObjectInputStream(server.getInputStream());
                oos = new ObjectOutputStream(server.getOutputStream());
 
                Osoba B = (Osoba) ois.readObject();
                System.out.println(B.imie);
                System.out.println(B.nr);
 
				Osoba A = new Osoba("Stefan", 7);
				oos.writeObject(A);
				oos.close();


       //         oos.close();
       //         ois.close();
                server.close();
            } catch (IOException e)
            {
                e.printStackTrace();
                break;
            } catch (ClassNotFoundException e)
            {
 
                e.printStackTrace();
            }
        }
    }
}

KLASA CLIENT:

public class Client
{
    Socket socket = null;
    private ObjectOutputStream oos = null;
    private ObjectInputStream ois = null;
 
    Client(int port)
    {
        try
        {
 
            socket = new Socket("localhost", port);
            oos = new ObjectOutputStream(socket.getOutputStream());
            ois = new ObjectInputStream(socket.getInputStream());
 
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
 
    void Wysylanie(Osoba A)
    {
        try
        {
            oos.writeObject(A);
            oos.close();

 Osoba B = (Osoba)ois.readObject();
			ois.close();
 
        } catch (IOException e)
        {
            e.printStackTrace();
        }
 
    }
 
}
0

ktoś coś poradzi ?

0

Ja planuję wrzucic ten temat do kosza z adnotacją "szczątkowy opis problemu". To cie zadowoli? Bo nadal nie raczyłeś napisać co konkretnie się dzieje.

0

Dobra napisałem program ilustrujący w miarę to co chce zrobić i wstawiłem go w załaczniku.

0

Teraz ktoś potrafi pomóc ?

0

Gniazda nie przesyłają obiektów w sensie OOP tylko łańcuchy. Serializuj do jakiego xml-a i przesyłaj.

0

Proszę :) Nie jest może to kod dopracowany wyglądem ale po prostu pokopiowałem z mojego projektu.

Odpalasz najpierw test ,odpalasz serwer.Potem odpalasz drugi raz , klikasz wysyłasz i odbierz.

0

@janiu, @Shalom napisał już dawno, że zamykasz strumienie. Zamykaj je dopiero gdy użytkownik kończy program.
//Btw, przyciski są za małe i napisy się na nich nie mieszczą.

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