Выбор протоколов для сервера

Сеть в Unity3D

Re: Выбор протоколов для сервера

Сообщение Ert Donuell 09 фев 2012, 16:24

Большое спасибо всем откликнувшемся!

gnoblin писал(а):Вот основа rudp-протокола в фотоне:
http://enet.bespin.org/

Это же С вроде.. Веб приложения пошлют меня нафиг)
Решил порыть вариант с Lidgren - там сорцы интересные. Мне там есть чему поучиться.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Выбор протоколов для сервера

Сообщение gnoblin 09 фев 2012, 17:17

Ert Donuell писал(а):Большое спасибо всем откликнувшемся!

gnoblin писал(а):Вот основа rudp-протокола в фотоне:
http://enet.bespin.org/

Это же С вроде.. Веб приложения пошлют меня нафиг)
Решил порыть вариант с Lidgren - там сорцы интересные. Мне там есть чему поучиться.


ну да, они его переписали на .net
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Выбор протоколов для сервера

Сообщение Ert Donuell 09 фев 2012, 18:25

Спасибо, поизучаю :-B
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Выбор протоколов для сервера

Сообщение Ert Donuell 13 фев 2012, 14:07

Кгхмм.. Я тут поискал информацию, кое-что для себя нашёл. Но снова упёрся в стену. :ymsigh:
Стена эта касается размеров буффера для BeginSendTo и BeginReceiveFrom.

Для тех, кто забыл:
Код: Выделить всё
public IAsyncResult BeginSendTo(
   byte[] buffer,
   int offset,
   int size,
   SocketFlags socketFlags,
   EndPoint remoteEP,
   AsyncCallback callback,
   Object state
)

Код: Выделить всё
public IAsyncResult BeginReceiveFrom(
   byte[] buffer,
   int offset,
   int size,
   SocketFlags socketFlags,
   ref EndPoint remoteEP,
   AsyncCallback callback,
   Object state
)


Собственно с BeginSendTo трудностей не возникает.
А вот BeginReceiveFrom заставляет задуматься - как же мне получить массив данных, если мне заранее неизвестен его размер?? :-\

Я тут надумал делать приём сообщения в два захода:
1. Отсылать и, как следствие, принимать размер сообщения
2. Слать-принимать само сообщение


И всё бы ничего, да только вот UDP, кой я и использую для передачи данных, любит терять и дублировать пакеты.
А ещё хрен его знает, от какого клиента пришёл размер сообщения, а от какого само сообщение.

Ну неужели нельзя считать первые четыре байта int сообщения о размере (а-ля хедер), а затем читать что осталось согласно полученной информации??

Смиренно прошу о помощи, ибо нет больше сил блуждать в темноте. :ymhug:
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Выбор протоколов для сервера

Сообщение gnoblin 13 фев 2012, 16:32

и вот таких стен для неопытного юзера будет еще 100500 ).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Выбор протоколов для сервера

Сообщение Ert Donuell 13 фев 2012, 17:13

Вне всяких сомнений ;)
По крайней мере, я своей головой работаю.
И это приносит свои плоды.

Самое популярное, если не единственное адекватное решение - установка общего максимального размера сообщений.
Т.е. берём самое большое из сообщений и принимаем его размер за эталонный. Блин.. Не шоколадно, но и то хорошо.

Если же у кого-нибудь таки возникнут шоколадные идеи, буду рад изучить (popcorn)
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Выбор протоколов для сервера

Сообщение VBProgr 09 апр 2012, 17:24

Создавайте максимальный буфер (для udp пакетов, насколько я помню, рекоммендуется размер не более 2-кб). Потом EndRecieveFrom (вызывайте его в AsyncCallback-e, когда ar.IsCompleted) вернет количество реально принятых байтов. Вот это количество и используйте из буфера.
skype: vbprogr
Добавить vbprogr в Skype
VBProgr
UNITрон
 
Сообщения: 319
Зарегистрирован: 24 сен 2011, 14:11

Пред.

Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3