Przesyłanie danych do serwera działa bez problemu. Niestety nie umiem zrobić tak, żeby serwer wysyłał coś do klienta. Ani odczytanych danych z klawiatury, ani po prostu zwykłej zmiennej String nie chce mi wysłać. Macie jakiś pomysł?

EDIT:
Ok, poradziłem sobie i z serwera mogę wysyłać wiadomości do klienta. Niestety problem jest taki, że serwer odbiera tylko jedną wiadomość, a potem musi coś wysłać klientowi żeby odebrać kolejną. Można temu jakoś zaradzić?

package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import smTest.Data;

public class Client {

	public static void main(String[] args) {

		int port = 54321;
		String ipAdress = "192.168.1.10";
		
		
		try {
			Socket socket = new Socket(ipAdress, port);
			PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
			Scanner sc = new Scanner(System.in);
			String str;
			String strIn=null;
			Scanner in = new Scanner(socket.getInputStream());
			
			while(sc.hasNext()){
				str = sc.nextLine();
				out.println(str);
				out.flush();
				if(!(strIn = in.nextLine()).equals("")){
					System.out.println(strIn);
					strIn = null;
				}
					
				if(str.equals("exit")) break;
			}
			ObjectOutputStream ous = new ObjectOutputStream(socket.getOutputStream());
			ous.writeObject(new Data());
			sc.close();
			socket.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}


 package network;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {

	public static void main(String[] args) {

		int port = 12345;
		ServerSocket serverSocket = null;
		
		try {

			serverSocket = new ServerSocket(port);
			ExecutorService exec = Executors.newCachedThreadPool();
			
			while(true){
				//oczekiwanie na zgłoszenie klienta
				Socket socket = serverSocket.accept();
				//tworzenie wątku dla danego połączenia i uruchomienie go
				exec.execute(new ServerThread(socket).getFt());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

import smTest.Data;



public class ServerThread implements Callable<String>{

	Socket mySocket;	
	
	FutureTask<String> ft;
	
	public ServerThread(Socket mySocket){
		this.mySocket = mySocket;
		ft = new FutureTask<String>(this);
	}

	public FutureTask<String> getFt() {
		return ft;
	}


	@Override
	public String call(){
		String txt = mySocket.getInetAddress().getHostName();
		
		try {
			PrintWriter out = new PrintWriter(new OutputStreamWriter(mySocket.getOutputStream()));
			Scanner sc = new Scanner(System.in);
			String strOut = null;
			//odbieranie i drukowanie danych
			BufferedReader in = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
			String str;
			Data data = null;
			
			while (!(str = in.readLine()).equals("exit")) {
				System.out.println("Wiadomość od klienta: " + str);			
				strOut = sc.nextLine();
				out.println("Wiadomość od SERWERA: " + strOut);
				out.flush();				
				if(str.equals("exit")) break;
			}
			
			ObjectInputStream ois = new ObjectInputStream(mySocket.getInputStream());
			data = (Data)ois.readObject();
			System.out.println("koniec pracy");
			System.out.println(data.getCurrentTemperature());
			mySocket.close();
		
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		return "Zrobione! Socket: " + txt + " is closed.";
	}
}