Серверные / клиентские сокеты - PullRequest
1 голос
/ 13 сентября 2011

Хорошо, я новичок в программировании сокетов и создаю игру, которая будет запускаться с сервера.Я собираюсь попытаться заставить сотню клиентов работать с моего сервера.Должен ли я сделать один экземпляр слушателя или один для каждого клиента?Также я попытался собрать сотню слушателей на 100 разных портах, но когда я запускаю свой сервер, я получаю сообщение об ошибке при попытке запустить слушателей.Игра будет 3D RPG / MMORPG.Большая часть игровой логики в клиентах, хотя.Как вы думаете, что я должен делать?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Если вы собираетесь использовать TCP-сокеты, то вы должны создать один сокет слушателя (т.е. создать сокет, привязать его к определенному порту и вызвать для него Listen ()). Затем, когда вы принимаете соединение и получаете другой сокет, который вы используете для приема / отправки данных от / к клиенту:

Socket socketListener;

// create listening socket
socketListener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 30120);      // use port 30120
//bind to local IP Address.
socketListener.Bind(ipLocal);

//start listening
socketListener.Listen(4);
while (true)   // loop that accepts client connections
{
    Socket socketWorker = socketListener.Accept();
    HandleClientConnection(socketWorker);   // your routine where you communicate with a client
}

Кроме того, рассмотрите возможность использования сокетов в асинхронном режиме, который будет более эффективным с точки зрения производительности.

0 голосов
/ 13 сентября 2011

У вас только один прослушиватель на конечную точку сервера.Затем слушатель создаст соединение для клиента, который использует другой порт.Именно это соединение вы фактически используете для общения.

...