Прежде всего, это проблема домашней работы. Говоря, я застрял. Googling для java Properties over Sockets приводит к множеству нерелевантных вещей.Свойства потоковой передачи Java поверх сокета
Я пытаюсь передать объект Properties через сокет. API говорит, что это можно сделать с помощью Stream или Writer/Reader, но я не могу заставить его работать. Я могу сделать это вручную, то есть, если я прочитаю файл строки за строкой и передам его через PrintWriter.
На стороне клиента я получил примерно:
socket = new Socket(host, port);
outStream = socket.getOutputStream();
out = new PrintWriter(outStream, true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
reader = new BufferedReader(new FileReader(file));
...
props.load(reader);
props.store(out, null);
На стороне сервера приемные биты выглядят как:
out = new PrintWriter(sock.getOutputStream(), true);
inStream = sock.getInputStream();
in = new BufferedReader(new InputStreamReader(inStream));
...
props.load(in); // hangs
// doesn't get to code here...
В этом случае висит на props.load (в). Вместо того, чтобы делать props.load (in), я читал его в строке за строкой, чтобы убедиться, что работает props.store (out, null), и данные выглядят как переносимые.
Есть что-то о загрузке/хранении Я не понимаю, или это проблема с Stream/Writer/Reader?
Вы закрыли свой выходной разъем после того, как закончили запись свойств на него? –
Вам нужно сообщить серверной стороне сокета, что сообщение завершено. Вам нужен механизм демаркации. Когда заканчивается файл свойств? Сервер не знает, поэтому он пытается продолжать чтение, если вы не закрываете сокет с клиентской стороны или что-то еще не происходит. – mschonaker
Итак, мне нужно закрыть его и снова открыть его? 'Sock.close(); носок.connect(); EDIT: просто прочитайте документы Socket, это не сработает. Если я хочу проверить транзакцию, мне следовало бы это сделать «вручную»? – kjprice