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

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

Сообщение Anonymous »

Я очень не понимаю, как и почему работает этот пример соединения клиент-сервер.
У меня есть два класса: NetworkClient и NetworkServer.< /p>
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»