Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Передача Properties по сети


Автор: Norby89 12.3.2011, 18:08
Есть два класса: 
Сервер:
Код

package Server;

import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
    public static void main(String[] args) {
        try {
            ServerSocket sock = new ServerSocket(4444);
            Properties prop = new Properties();

            prop.setProperty("myPr1", "val1");
            prop.setProperty("myPr2", "val2");
            prop.setProperty("myPr3", "val3");

            Socket s = sock.accept();
            OutputStream out = s.getOutputStream();
            prop.store(out, "Hi there");
            out.flush();
            System.out.println("Props stored");
            Thread.sleep(5000);
            s.close();
            sock.close();
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}


Клиент:
Код

package Client;

import java.io.InputStream;
import java.net.Socket;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {
        try {
            Socket sock = new Socket("127.0.0.1", 4444);
            Properties prop = new Properties();
            InputStream in = sock.getInputStream();
            prop.load(in);
            System.out.println(prop);
            Thread.sleep(1000);
            sock.close();
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}


Properties.load на клиенте завершается только после закрытия сокета на сервере. Вопрос: почему и как этого избежать, если я, допустим, хочу постоянно читать Properties в цикле из этого потока?

Автор: Kircul 14.3.2011, 11:10
А сериализацию объекта попробовать не хотите?

Автор: LSD 14.3.2011, 13:07
Цитата(Norby89 @  12.3.2011,  18:08 Найти цитируемый пост)
Properties.load на клиенте завершается только после закрытия сокета на сервере. Вопрос: почему и как этого избежать, если я, допустим, хочу постоянно читать Properties в цикле из этого потока? 

Потому что Properties.load() рассчитан на работу с файлами, т.е. читает до тех пор пока данные в потоке не закончатся. Для файлов это конец файла, для сокетов это закрытие сокета. Использовать Properties.load() для постоянного чтения данных по сети не получится, надо использовать другие средства.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)