Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
6-1084790249
AndrewK
2004-05-17 14:37
2004.07.18
Загрузка курса валют с РБК


11-1077629827
<Falcon>
2004-02-24 16:37
2004.07.18
Splash форма и AlphaBlend


14-1088680831
ricks
2004-07-01 15:20
2004.07.18
Помогите найти музыку


3-1087827970
Karlson
2004-06-21 18:26
2004.07.18
Работа с информацией из выбранных строк в DbGrid


3-1087982731
Valeri
2004-06-23 13:25
2004.07.18
DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский