Форум: "Сети";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизSockets Найти похожие ветки
← →
xman © (2004-05-17 20:09) [0]Мастера, я хочу написать сетевую игру, используя сокет я делаю так, отправляю сообщение с координатой клиенту, но когда отпралять несколько координат сразу то они сливаются в 1 строку.
Как мне избежать это.
Я делал так все координаты я вписую в 1 строку типа "#POS1,2#POS13,4" и т.д. потом отправляю. Но бывают такие ситуации когда нужно отправлять сразу несколько сообщений и это мне не понравилось. И этот способ сильно накручен, приходится вытягивать значения со строки и присваивть объектам.
Я бы хотел узнать как вы реализуете обмен данными.
← →
Rouse_ © (2004-05-17 21:56) [1]Для отправки нескольких координат придумай собственную структуру и отправляй ее... а вообщето Stream...
← →
~ls © (2004-05-19 08:44) [2]В DelphiX есть не плохой компонентик для реализации сетевой игры, причем там уже все сделано с точки зрения сети, тебе только посылать и отправлять!
Если надо - есть статейки по этому поводу.
А еще было бы интересно узнать, что за игра!
← →
xman © (2004-05-19 09:41) [3]пишу Сетевой дурак
а вообщето я спросил тошо ни раз я сталкивался с такой проблемой
и интересно било узнать выши методы прием и посылок данных
← →
Григорьев Антон (2004-05-19 13:09) [4]Каждому пакету сделать заголовок с указанием длины, и читать сначала заголовок, а потом остаток известной длины. Или использовать протокол UDP, в котором пакеты не сливаются.
← →
Senti (2004-05-19 15:49) [5]Все очень просто решается. К каждой строке прибавляешь разделитель. Например "#0". А при получении данных просто разбиваешь все снова на строки. Все очень просто и лаконично.
Типа что-то
while pos("#",s) <> 0 do
begin
tmp:=Copy(.....);
MyProcedure(tmp);
Delete(s,1,pos("#",s));
end;
← →
xman © (2004-05-19 22:02) [6]А если несколько клиентов одновременно отправлять будут кучу сообщений. то какие то сообщения будут терятся
← →
VLoB (2004-05-23 23:38) [7]>>Каждому пакету сделать заголовок с указанием длины
зачем, если сокет может вернуть количество принимаемых байт? хотя, могу путать, сам только начал распахивать тему =)
имхо, можно попробовать без строк и без разделителей, вот моя реализация -
делаю буфер в памяти,
первый байт - заголовок (тип пакета, чей, и т.п.), далее, т.к. максимальные координаты в игре и по Х и по У - 2000 точек,
то на хранение каждой - 11 бит (в сумме 22 бита),
еще 22 уходит на координаты попадания, ну и по мелочи на всякие нужные разности, короче, в итоге выходит 66 бит - запихиваю их в буфер и гоню на другую машину, где разбрасываю по нужным переменным... усе
вот только пока не думал, как реализовать к примеру, чтобы 8 клиентов обменивались пакетами, это ж каждый должен знать о каждом,
умножаем 66 на 7, в итоге имеем 462 бита или ~57 байт...хммм... многовато...
может кто-нибудь делал сетевые игры, и знает, какой примерно пакет считается оптимальным по величине (чтобы скорость премлема была и траффик не очень большой был, в случае инета)?
и с какой частотой слать пакеты от машины к машине?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c