Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.036 c
1-1088291086
killer
2004-06-27 03:04
2004.07.18
Как передать TGraphic из DLL в программу


3-1088349237
negrila
2004-06-27 19:13
2004.07.18
Firebird Transactions


1-1089090774
vlgrig1961
2004-07-06 09:12
2004.07.18
Как заставить компоненты TShape, TBevel выполять BringToFron


10-1022826192
Олег Лаукарт
2002-05-31 10:23
2004.07.18
После Upgrade2 в D6 проблемы с &#xA0;Corba


6-1085042774
Вопрос
2004-05-20 12:46
2004.07.18
Работа компьютеров в локальной сети




   Наверх