|
|
|||||
listener
|
На ум приходит только проблема с crossdomain.xml, который сервачок должен отдать клиенту сразу после коннекта, иначе амба. http://www.flasher.ru/forum/showthread.php?t=135168
А так, гадать не особо желание имеется... исходник сервера выложь, а посмотрим. |
|
|||||
Регистрация: Aug 2010
Сообщений: 9
|
Проблему с сервером победил (во флеше 0й байт передавать нужно как \n для моего сервака на с++, а вот серваку нужно отдавать как строка+0). Но у меня проблема другая:
А от чего зависит скорость ответа сервера? У меня написана серверная часть на С++, которая принимает поток от одного клиента и просто ретранслирует его другому клиенту. Подсчёт переданных пакетов (передача происходит 30 раз/сек) и полученных пакетов дала мне статистику, что из 30 доходит лишь 10 пакетов. Я нашёл способо "прогнозирования" 5 пакетов из 6, что бы "сгладить" результаты, получаемые 2ым клиентом, но хотелосьбы что бы передавались все 30 пакетов/сек - это возможно или нет. Если возможно, то в чём затык: железо? криво написанный сервер? медленный клиент? ЗЫ: в 1 пакете передаётся 10Байт ЗЗЫ: для "сглаживания" стал передавать 20Байт, при этом на скорость работы это никак не сказалось (как было 10 из 30 так и осталось). Тестировал: передавал 40Байт в 1 пакете - всё-равно 10/30, посему складывается впечатления, что проблема скорее всего или в возможности сетевого адаптера или вообще в возможности так часто передавать дынные. |
|
|||||
Регистрация: Aug 2010
Сообщений: 9
|
Обмен пакетами с 10.0.254.230 по 32 байт:
Ответ от 10.0.254.230: число байт=32 время<1мс TTL=61 Ответ от 10.0.254.230: число байт=32 время<1мс TTL=61 Ответ от 10.0.254.230: число байт=32 время<1мс TTL=61 Ответ от 10.0.254.230: число байт=32 время<1мс TTL=61 С пингом всё ок, ибо машинка в локальной сети находится. |
|
|||||
Регистрация: Aug 2010
Сообщений: 9
|
Написал многопользовательский сервачёк. Клиенты успешно к нему конектся. Но есть одна проблема, которую не могу пока решить (вернее могу, но метод решения мне кажется через...). Вообщем рассмотрим задачу например из 2х клиентов:
1. клиенты конектятся к серваку и тут всё ок 2. мне нужно что бы сервак ретранслировал пакеты от 1го клиента 2му и наоборот. Вот тут и появляется загвоздка. Фишка в том, что клиентов может быть сколь угодное кол-во и они могут объеденятся в любое колво между собой (например игра с 5 соперниками, 11 соперниками 112 соперниками и т.п.) и таких объединений тоже может быть различное кол-во. Ввиду этого я планировал создать "список списков". Список 1го уровня - это список "объединений" в котором хранится информация о том начата турнир или нет и ссылка на список 2го уровня. Список 2го уровня хранит информацию об игроках зарегестрировавшихся в турнире. Реализацию списками вижу наиболее преемлимым, т.к. как в списке 1го уровня так и в списке 2го уровня могут выбывать клиенты в произвольном порядке, т.о. если это реализовать массивами (динамическими), то будет происходить обход "по мёртвым" клиентам (а это процессорное время) или думать о вырезании элементов из массива (тоже время процессора тратить). Реализация списком наиболее преемлемой как мне кажется. Но я не учёл тот момент, что "список" у меня генерирует клиент, посылая специальную команду и этот список к сожалению "локальный", т.е. когда игрок1 послал команду создать игру: в списке появилось по 1му элементу, а когда 2ой игрок посылает команду на соединение, то его список до сих пор пустой, т.к. список создался у потока игрока1. Можно ли как то создавать переменные, которые будут доступны всем клиентам, которые подключились и если есть возможность - то как это реализовать. ЗЫ: метод, который приходит в голову через ж: это написать ещё 1го киента на си++, которому будут передаваться все команды с сервака и именна в клиенте будут хранится все данные, т.о. любой "флеш-клиент" через сервак отправляет и получает данные с "с++ клиента" - но эта схема на столько грамоздка, что... вообщем хочу сделать по человечески а не как получится :-) |
|
|||||
Регистрация: Jun 2011
Сообщений: 1
|
Получилось сделать, чтоб сервер (как в 10 сообщении) давал в ответ клиенту его же сообщения, но как сделать связь между всеми сокетами, тоесть чтобы один клиент отправлял сообщение всем остальным(как в чате).
Посоветуте плиз какую-нибудь книжку, чтоб узнать о win сокетах в c++, а то MS ..слишком на английском И возможно ли в socket.connect("127.0.0.1", 2803); написать не ip, а реальный домен сервера(а то у него динамичейский ip) Извиняюсь, что поднимаю такую старую тему, но это лучшая тема.. по этой теме Спасибо большое заранее |
|
|||||
listener
|
Книжек немало всяких, гуглите и выбирайте на ваш вкус. Win Socket - тема немаленькая. Но неплохо так же запастись каким-нибудь исходничком. Опять же в гугл. Могу порекомендовать покопаться на sources.ru, там раздел есть огроменный с исходниками. Туда же rsdn.ru, codeproject.com, codeguru.com. Хорошие ресурсы.
|
|
|||||
Регистрация: Sep 2011
Сообщений: 8
|
А можете подсказать как сделать чтобы сообщение отсылалось всем подключившимся клиентам? Или хотя бы в какую сторону копать?
|
Часовой пояс GMT +4, время: 18:18. |
|
« Предыдущая тема | Следующая тема » |
|
|