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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Серверная часть 
:(
    Опции темы
DenWPF
Дата 30.11.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



Вообщем пишу серверную игрушку, для начала буду её тестить на localhost через denver.

так вот как делать запросы и то что будет хи обрабатывать.

к примеру я хотел для начала сделать так:

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

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



PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DenWPF, потом все это будет не очень удобно переносить, если захочешь сделать "игра по сети / интернет"
используй Socket, WCF, их тоже можно тестировать по сети.
как делать запросы, зависит от твоей реализации и вообще от подхода =) на сокетах хоть строчку отправляй "Номер игрока, x, y" и на клиенте парси ее, хоть структуру, хоть сериализованный класс) на твое усмотрение


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



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

надо передовать до 5 переменных, пользователей не больше 10.
сокеты хорошо....но я не капельки не знаю что это, есть реализация какая то?=)
PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DenWPF, 
http://msdn.microsoft.com/ru-ru/library/sy...ets.socket.aspx
+ поиск по форуму в разделе .net - Распределённые приложения и сеть,по слову Socket

Добавлено через 2 минуты и 59 секунд
также можно на
http://www.techdays.ru/
пасматреть информацию по WCF, если надо передавать простые данные - то сделай класс с нужными данными, и используя сериализацию + сокеты / wcf передавай его)


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



во-во класс мне как раз и подойдет, а что исходника нету?=0

реально, надо что бы по запросу приходила информация о корднатах и ещё одна переменая ИНТ.
вообщем 3 числа.



Это сообщение отредактировал(а) DenWPF - 30.11.2009, 16:06
PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исходника чего ? класса, так твой класс должен быть. Например тебе надо передавать номер клиента, координаты, хп, имя игрока, и т.д., к примеру, делаешь класс:
Код

    [Serializable]
    public class Player
    {
        public int PlayerNumber { set; get; }
        public int X { set; get; }
        public int Y { set; get; }
        public int HealPoint { set; get; }
        public string Name { set; get; }
    }

Пихаешь его в ClassLibrary, (которую потом подключишь к серверному приложению (сервер пусть хоть консольный будет)) и к клиенту
Потом заполняешь нужной информацией, и т.д., сериализуеш (например с использованием BinaryFormatter) и передаешь его на сервер к примеру используя сокеты.
На сервере, принял класс и раздал его всем пользователям (или определенным пользователям, но тогда у тебя должен быть список пользователей на сервере (например экземпляры подключенных сокетов, както индифицированных)). На клиенте, когда клиенты приняли данные через сокет, десериализуют его обратно из потока в класс и читают необходимые данные.
Это простое решение, если брать сокеты. 


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



эм, та нет, как раз нужен пример всего того что ты описал ниже=)))

не надо много. надо только - человек отправляет на сервер один класс. и он там сохраняется. и так же запросить данные тоже из определеного класса. а лучше из List<t>

Добавлено через 17 секунд
или я тяжелую тему прошу?
PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DenWPF, для начала разберись с сокетами (как это все работает) и сделай обычный HelloWorld, сервер + клиент(ы), чтоб передавали строчки там клиент серверу шлет "привет я клиент", сервер отвечает "привет я сервер", а к нему уже подключить работу с передачей классов не составит труда =)


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



сложно конечно...
ну хотя бы основу.
я использую домен в denvere к примеру test.ru какой его порт  ?

и что все таки является сервером ? это ехе файл?


PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(DenWPF @  30.11.2009,  16:35 Найти цитируемый пост)
и что все таки является сервером ? это ехе файл?

это приложение которые ты напишеш с использованием класса System.Net.Socket и к примеру TcpListener.
Прочитай для начала вообще что такое сокеты, и найди любой рабочий пример HelloWorld и такие вопросы сразу отпадут

Добавлено через 1 минуту и 57 секунд
к примеру
http://rsdn.ru/article/dotnet/dotnetchat.xml


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



 http://download.microsoft.com/download/6/4...8adf/CSharp.msi
вот там есть Advanced .NET Framework (Networking) - Use Sockets ток чот оно не работает=((
PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DenWPF, вот, набросал простейший пример, а дальше статьи, документацию в руки и вперед)
Сервер:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;

namespace SockServ
{
    public class Server
    {
        private TcpListener server = null;
        private Thread receiveThread;


        public void RunServer(int pPort)
        {
            server = new TcpListener(pPort);
            receiveThread = new Thread(Receive);
            
            server.Start();
            receiveThread.Start();
        }

        private void Receive()
        {
            while (true)
            {
                try
                {
                    TcpClient acceptedClient = server.AcceptTcpClient();
                    NetworkStream stream = acceptedClient.GetStream();

                    Byte[] buff = new Byte[256];
                    int receiveSize = 0;
                    while ((receiveSize = stream.Read(buff, 0, buff.Length)) != 0)
                    {
                        string receiveMessage = System.Text.Encoding.ASCII.GetString(buff, 0, receiveSize);
                        Console.WriteLine(receiveMessage);

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes("Nice, i am server :P");
                        stream.Write(msg, 0, msg.Length);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
    }
}


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SockServ
{
    class Program
    {
        static void Main(string[] args)
        {
            Server myServer = new Server();
            myServer.RunServer(777);
            Console.ReadLine();

        }
    }
}



клиент
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace SockClient
{
    public class SocketClient
    {
        TcpClient client;
        Thread receiveThread;
        NetworkStream stream;

        public void RunClient(string pAddress, int pPort)
        {
            client = new TcpClient(pAddress, pPort);
            receiveThread = new Thread(Receive);
            stream = client.GetStream();
            receiveThread.Start();
        }

        private void Receive()
        {
            while (true)
            {
                try
                {
                    byte[] receiveBuff = new byte[256];
                    int receiveLength = stream.Read(receiveBuff, 0, receiveBuff.Length);
                    if (receiveLength > 0)
                    {
                        string receiveString = System.Text.Encoding.ASCII.GetString(receiveBuff, 0, receiveLength);
                        Console.WriteLine("Receive message: " + receiveString);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception: " + e.Message);
                }
            }
        }

        public void SendMessage(string pMessage)
        {
            try
            {
                Byte[] buffMessage = System.Text.Encoding.ASCII.GetBytes(pMessage);
                stream.Write(buffMessage, 0, buffMessage.Length);
                Console.WriteLine("Message sending");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
        }
    }
}


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace SockClient
{
    class Program
    {
        static void Main(string[] args)
        {
            SocketClient client = new SocketClient();
            client.RunClient("127.0.0.1", 777);
            client.SendMessage("hi, i am client");
        }
    }
}



--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



оо спасибо=) 
Сервер - его скомпилить и бросить в денвер
Клиент- ну это более понятно

Добавлено @ 19:33
а уже понял, просто запустить.
попробую из твоего и сдлеать=)


эх=(
не получится из твоего примера переделать=((( 

Это сообщение отредактировал(а) DenWPF - 30.11.2009, 20:27
PM MAIL   Вверх
Exai1e
Дата 30.11.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DenWPF, ну переделать под что ? под передачу данных ? (класса) отправляй в поток не стринг(и)  smile , а поток из BinaryFormatter, ты для начала разберись как это пример работает, почитай вообще про сокеты, а переделать под "из стринг" в "байты" не составит труда =)
зы. про сериализацию не забывай это раз) а второе сериализуемый класс должен быть в исходном виде доступен обеим сторонам (тултип использовать для этого можно клас либ) или сериализовать в xml и парсить на клиенте / сервере

Это сообщение отредактировал(а) Exai1e - 30.11.2009, 21:27


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
DenWPF
Дата 30.11.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



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

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

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

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


 




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


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

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