Соединение клиента и сервера через сокет Java. Почему сервер читает входные данные клиента, а не выходной поток?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Соединение клиента и сервера через сокет Java. Почему сервер читает входные данные клиента, а не выходной поток?

Сообщение Anonymous »

Я очень не понимаю, как и почему работает этот пример соединения клиент-сервер. У меня есть два класса: NetworkClient и NetworkServer. NetworkClient создает сокет:
class NetworkClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost", 3141);

OutputStream out = socket.getOutputStream();
PrintStream ps = new PrintStream(out, true);
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

ps.println("Es begab sich aber zu der Zeit,");
System.out.println("client sent: Es begab sich aber zu der Zeit,");

System.out.println("client received: "+reader.readLine());
}
//some other code
}
}

И NetworkServer подключается к этому сокету:
public class NetworkServer {
private final ServerSocket srv;
public NetworkServer(int port) throws IOException {
srv = new ServerSocket(port);
}

private void connectAndTalk() {
Socket socket = null;
try {
socket = srv.accept();
communicate(socket);
}
// some code
}

private void communicate(Socket socket) throws IOException, InterruptedException {
BufferedReader in =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
String s;

do {
s = in.readLine();
System.out.println("server received: "+s);

if(s.equals("Es begab sich aber zu der Zeit,")) {
TimeUnit.SECONDS.sleep(4);
out.println("dass ein Gebot ausging vom Kaiser Augustus,");
}
// some code


Итак, вопрос в следующем: клиент записывает в свой выходной поток и читает свои входные данные. Почему сервер читает входные данные клиента, а не выходной поток? И, аналогично, почему сервер записывает в поток вывода клиента? Почему это выглядит не так:
private void communicate(Socket socket) throws IOException, InterruptedException {
BufferedReader in =
new BufferedReader(new InputStreamReader(socket.getOutputStream()));
PrintStream out = new PrintStream(socket.getInputStream());


Подробнее здесь: https://stackoverflow.com/questions/792 ... he-clients
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»