Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
14-1088137119
CacheMeM
2004-06-25 08:18
2004.07.18
Исходники на Турбо Паскаль


14-1088359836
Red - Dragon
2004-06-27 22:10
2004.07.18
Проблема с иконкой в трее


3-1088274833
Karburator
2004-06-26 22:33
2004.07.18
Как подтвердить транзакцию в процедуре?


14-1088229142
Sanek_metaller
2004-06-26 09:52
2004.07.18
Как поиграть в WarCraft3 FT по модему?


3-1088071800
чайник1
2004-06-24 14:10
2004.07.18
Копирование ячейки