Java сервер-клиент программирования - PullRequest
2 голосов
/ 30 января 2011

привет я новичок в Java, у меня есть сомнения:

в случае, например, я пишу игру с сервером и 3-мя клиентами, и поскольку мне не нужны потоки, потому что клиенты следуют определенному порядку, а в свою очередь может играть только один из них,

Могу ли я поставить сервер в режим прослушивания и выполнить такой код:

 while((i++ < maxConnections) ){

      Socket connection  = listener.accept();
        // code that saves the  "connection"  to a player Object 
        //not closing the connection 

      }

скажите мне, если я не прав (заинтересован в части после принятия):

если я не закрываю соединение каждый раз, когда создаю его для каждого клиента, могу ли я писать и читать из потока каждый раз, когда мне это нужно ?? (используя переменную соединения, сохраненную в каждом объекте игрока) Я закрою соединение только после того, как клиент завершит всю связь с сервером

если я не закрою его, второй клиент не сможет подключиться? это возможно только с потоками?

извините, но я действительно запутался в сетевом программировании

Ответы [ 2 ]

2 голосов
/ 30 января 2011

Недостаток этого метода заключается в том, что вам нужно принять столько слушателей, чтобы продолжить выполнение приложения. Кроме того, вы должны хранить их (что, как я вижу, вы делаете с объектом Player). Что бы я сделал, так как игра очень мала, передавайте принятые конечные точки сокетов новым потокам, где они будут управляться. Проблема с этой системой заключается в том, что у вас нет обработки отправки / получения, поэтому вам нужно что-то для управления этим без блокировки остальной части вашего сервера. Вы не должны выполнять отправку и получение из сокета в отдельных потоках, управлять отправкой и получением в одном и том же потоке, но быть умным и не блокировать.

Кроме того, я бы посоветовал использовать каналы Socket для простоты программирования. В этом случае селектор сообщит вам, когда в сокете есть данные, доступные для чтения, или в буфере отправки, доступном для записи. Вы ожидаете в цикле на методе select () селектора после регистрации ваших каналов с ним. Apache MINA проще, поскольку он обрабатывает сокеты и предоставляет асинхронные методы для работы, а также обрабатывает все эти базовые вещи. Вы можете использовать их или дождаться завершения операций, так что это довольно гибко.

1 голос
/ 30 января 2011

Использовать поток для каждого подключенного клиента.Ваша игровая логика должна быть независимой от реальной базовой технологии для передачи данных от клиента на сервер.

Если вы планируете серьезно заняться разработкой Игрового сервера, RedDwarf уже имеет все на своем местедля вас.

...