Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Multicast рассылка при помощи сокетов клиентам. Подключается только один клиент к се.... 
:(
    Опции темы
Giggs131
  Дата 2.11.2011, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Нужно создать сетевую игру "Шашки" с возможностью подключения болельщиков. Поискал по интернету, "собрал" код для сериализации объекта класса клиентом на сервер. Всё отлично работает, но подключается только один клиент, следующий запуск клиента ничего не дает.. Так как ещё плохо понимаю тему по сокетам и сетевому взаимодействию, решил обратиться за помощью сюда... Пожалуйста, подскажите, в чем проблема :( И если не сложно, как организовать multicast рассылку клиентам. В сериализуемом объекте будет передаваться List<> объекта шашка на клиенты + доп. информация, нужная для организации логики игры..

Прилагается код сервера, который запускается при загрузке формы в фоновом потоке.

Код

private void ServerMainForm_Load(object sender, EventArgs e)
        {
            try
            {
                socketServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
                socketServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000));
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка создания сокета!", ex);
            }

            Thread socketThread = new Thread(new ThreadStart(Start));
            socketThread.IsBackground = true;
            socketThread.Start();
            MessageBox.Show("Form load!!!");
        }









        public static byte[] buffer = new byte[1024];
        public static ManualResetEvent socketEvent = new ManualResetEvent(true);
        public static Socket handlerA;
        public static IPAddress ipAddr;
        public static IPEndPoint localEnd;
        public static BinaryFormatter formatter;
        public static MemoryStream mStream;
        public static Socket listner;
        public static Socket handler;

        public static void Start()
        {
            ipAddr = IPAddress.Parse("127.0.0.1");
            localEnd = new IPEndPoint(ipAddr, 9003);
            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sListener.Bind(localEnd);
            sListener.Listen(10);
            AsyncCallback aCallback = new AsyncCallback(AcceptCallback);
            sListener.BeginAccept(aCallback, sListener);
            //socketEvent.WaitOne();
        }

        public static void AcceptCallback(IAsyncResult ar)
        {
                listner = (Socket)ar.AsyncState;
                handler = listner.EndAccept(ar);
                handlerA = handler;
                handler.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallback), handler);
        }

        public static void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                MessageBox.Show("In");

                formatter = new BinaryFormatter();
                mStream = new MemoryStream();

                MessageBox.Show("In 1");

                Socket handler = (Socket)ar.AsyncState;
                int bytesRead = handler.EndReceive(ar);

                MessageBox.Show("In 2");

                mStream.Write(buffer, 0, bytesRead);
                mStream.Position = 0;

                MessageBox.Show("In 3");

                //Десериализуем объект.
                PlayInfo pi = (PlayInfo)formatter.Deserialize(mStream);

                MessageBox.Show("In 4");

                MessageBox.Show(pi.Login + "Server");
                MessageBox.Show(pi.Play.ToString());

                mStream.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("RECEIVE SERVER SAYS: " + exc.Message);
            }
            //byte[]  serverBuffer = new byte[1024];
            //handlerA.BeginReceive(serverBuffer, 0, serverBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), handlerA);
        }

        public static void Send(string str)
        {
            byte[] byteData = Encoding.ASCII.GetBytes(str);
            handlerA.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), handlerA);
        }

        public static void SendCallback(IAsyncResult ar)
        {
            Socket handler = (Socket)ar.AsyncState;
            int bytesSend = handler.EndSend(ar);
        }


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  CheckersExam.rar 171,15 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.