Примечание: я знаю, что есть ответы на этот вопрос, но не могли бы вы сделать его простым, потому что мне не нужно разбираться в деталях, мне просто нужно нарисовать картинку в моей голове о том, как работает следующее, и, честно говоря, я не настолько умный, поэтому я заблудился во многих деталях.
Давайте рассмотрим следующий код:
//server
import java.net.*;
import java.io.*;
public class Server {
Server() throws IOException {
ServerSocket server = new ServerSocket( 4711 );
while ( true ) {
Socket client = server.accept();
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
int multiplikator1 = in.read();
int multiplikator2 = in.read();
int resultat = multiplikator1 * multiplikator2;
out.write(resultat);
}
}
//main server
public static void main (String[] args) {
try {
Server server = new Server();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//client
import java.net.*;
import java.io.*;
public class Client {
Client() throws IOException {
Socket server = new Socket ( "localhost", 4711 );
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
out.write( 4 );
out.write( 9 );
int result = in.read();
System.out.println( result );
server.close();
}
//client main
public static void main (String[] args) {
try {
Client client = new Client();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Итак, что я не понимаю, так это строки Socket client = server.accept();
и Socket server = new Socket ( "localhost", 4711 );
Server 1* <----------------------> 2* Client
note 1* 2* represents socket
создает ли строка Socket client = server.accept();
сокет на стороне сервера, т.е. Socket (1 *), или наоборот?
и создает ли строка Socket server = new Socket ( "localhost", 4711 );
сокет (2 *) ), который затем отправляет какое-то начальное сообщение в ServerSocket (ServerSocket server = new ServerSocket( 4711 );
), а затем после получения того, что начальное сообщение accept method
начинает работать и создает сокет (1 *), вот как это работает?