Как работает сокет в java, как он подключает между собой клиент и сервер и позволяет им обмениваться данными?
Если в 2х словах сокет - это канал связи между двумя приложениями в который оба пишут и читают сообщения.
Вот собрал Вам пример как соединить 2 приложения при помощи сокетов, запускайте сначала сервер, а потом уже клиент:
public class SocketExample extends JFrame {
SocketExample(String name, Socket socket) throws IOException {
JTextField field = new JTextField();
JTextArea area = new JTextArea();
JButton button = new JButton("send");
setTitle(name);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
area.setPreferredSize(new Dimension(400, 200));
area.setEditable(false);
setLayout(new BorderLayout());
add(area, BorderLayout.CENTER);
JPanel bottomPanel = new JPanel(new BorderLayout());
add(bottomPanel, BorderLayout.SOUTH);
bottomPanel.add(field, BorderLayout.CENTER);
bottomPanel.add(button, BorderLayout.EAST);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
button.addActionListener(a -> {
area.setText(area.getText() + "you: " + field.getText() + '\n');
out.println(field.getText());
field.setText("");
});
Executors.newSingleThreadExecutor().submit(new Runnable() {
@Override
public void run() {
while (true) {
try {
String inputLine;
if ((inputLine = in.readLine()) != null)
area.setText(area.getText() + "remote: " + inputLine + '\n');
} catch (IOException e) {
System.out.println("remote disconnected" );
System.exit(1);
}
}
}
});
addCloser(this, socket, out, in);
}
private static class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(6666);
SocketExample server = new SocketExample("Server", serverSocket.accept());
addCloser(server, serverSocket);
}
}
private static class Client {
public static void main(String[] args) throws IOException {
new SocketExample("Client", new Socket("localhost", 6666));
}
}
private static void addCloser(JFrame frame, Closeable... closeables){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
for (Closeable closeable : closeables) {
try {
closeable.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Задача: Сделать карусель фотографий, где последний элемент будет добавлять в карусель новые фотографии
В моем приложении есть тестВ каждом из вопросов можно выбрать один из 5 вариантов ответа
у меня имеется база данных SQLite в которую я добавляю и удаляю данные по принципу описанному ниже
Объекты находятся в куче, методы и локальные переменные в стеке, стек со всеми методами начинает выполняться при создании объекта, значит...