none
C++/.NET udp stream socket RRS feed

  • Вопрос

  • Доброго времени суток! Пишу подобие сервера Counter Strike 1.6, столкнулся с проблемой. Каким методом передовать ответ сервера?

    Судя по инофрмации на developer.valvesoftware.com  - 8 bit unsigned integer.

    Конечной задачей является создание сервера, принимающего запросы Challenge и прописывающии уникальный идентификатор пользовалтелю в setinfo _pw(аналог cookie в Веб)

    using namespace System; using namespace System::Net; using namespace System::Net::Sockets; using namespace System::Text; void main() { IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, 15555); UdpClient^ server = gcnew UdpClient(ipep); array<unsigned char>^ message; while(true) { IPEndPoint^ Remote = gcnew IPEndPoint(IPAddress::Any, 0); message = server->Receive(Remote); // тут нужно обработать полученый пакет и если, присутсвует запрос Challenge послать ответ все в том же 8 bit unsigned integer. Console::WriteLine("Принят пакет данных от {0}", Remote->ToString()); } }


    Подскажите пожалуйста, какой метод использовать для ответа сервера.

    21 февраля 2012 г. 8:39

Все ответы

  • Для ответа нужно использовать метод Socket::Send - метод (array<byte>)</byte>.

    Если вы обрабатываете запрос A2S_SERVERQUERY_GETCHALLENGE, то вам нужно убедиться что первые 4 символа равны FF:

    message[0] == 0xFF;

    message[1] == 0xFF;

    ....

    А после проверить что 5ый символ равен 0x57;

    Затем сформировать ответы массив array<unsigned char> в котором будет содержаться ответ.

    Чтобы перевести int в массив байт для ответа, можно использовать метод BitConverter::GetBytes.


    Для связи [mail]

    21 февраля 2012 г. 11:17
  • Видимо, я не правильно понял основу.

    На developer.valvesoftware.com описывается методы взамодействия с сервером. В моем случае приложение сервер, клиент сама игра.

    Клиент делает запрос(данные с Wireshark'a):

    ff:ff:ff:ff:54:53:6f:75:72:63:65:20:45:6e:67:69:6e:65:20:51:75:65:72:79:00

    декодированные данные:

    ÿÿÿÿTSource Engine Query�

    0000   00 30 67 51 4f 81 00 90 4c c0 00 20 08 00 45 c0  .0gQO...L.. ..E.0010   00 51 91 44 00 00 36 01 40 ec 3e 4c b1 c5 c0 a8  .Q.D..6.@.>L....0020   01 02 03 03 3d ee 00 00 00 00 45 00 00 35 5d 78  ....=.....E..5]x0030   00 00 f7 11 b4 83 c0 a8 01 02 3e 4c b1 c5 e5 f6  ..........>L....0040   69 87 00 21 b0 b5 ff ff ff ff 54 53 6f 75 72 63  i..!......TSourc0050   65 20 45 6e 67 69 6e 65 20 51 75 65 72 79 00     e Engine Query.
    Ответ сервера.

    Подскажите, каким образом можно сформировать массив для ответа, при условии что часть массива будет динамичной?

    • Изменено gotfazer 22 февраля 2012 г. 12:18
    22 февраля 2012 г. 12:13
  • Я не очень понимаю ваш вопрос.

    В чем заключается динамичность? Вам нужен как бы шаблон ответа "на сервере %d игроков" и вместо %d каждый раз будут подставляться нужные данные?


    Для связи [mail]

    28 февраля 2012 г. 14:02