Это самый базовый учебник о программировании клиент / сервер в Java.Давайте начнем с именования
- client - это устройство, взаимодействующее с реальными сенсорными событиями
- сервер устройство прослушивает события, вызванныеклиент
клиент реализует onTouchEvent(MotionEvent)
и записывает координаты x и y в свой сокет OutputStream
.Даже если вы хотите, чтобы это происходило как можно более в реальном времени, вам может потребоваться локально хранить события (x, y и метка времени) и передавать их через определенные промежутки времени.Как и любая другая операция блокировки, она будет выполняться в отдельном потоке, чем основной поток приложения.Это псевдореализация
ClientActivity
thread:
while activity_is_running:
sleep 100
socket.write list_of_events
onCreate(): start_background_thread
onViewTouched(): thread.add_event
сервер будет ServerSocket
прослушивать события.Каждый раз, когда событие получено, оно будет рисовать.Обратите внимание, что для доступа к потоку рисования из фонового потока, который прослушивает сокет, вы можете использовать Handler
.Обработчик - это просто способ запустить некоторый код в определенном потоке.Вам нужно только объявить переменную экземпляра Handler
для вашего ServerActivity
и создать ее экземпляр в onCreate
: таким образом Handler
будет привязан к основному потоку приложения, который также является потоком пользовательского интерфейса.
ServerActivity
thread:
while activity_is_running:
handler.draw socket.get_event_from_input_stream
onCreate():
handler: new Handler()
start_background_thread
Последняя часть - как запомнить уже нарисованные вещи, как на клиенте, так и на стороне сервера.Это связано с тем, что каждый вызов onDraw
дает вам чистое растровое изображение, поэтому вы должны либо сохранять каждое событие в списке и извлекать его из этого списка, либо хранить кэш уже нарисованных вещей ( смотри эту вставку )