Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][PHP][WebSocket] Problem z unpack
Nicc0
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 18.01.2013

Ostrzeżenie: (0%)
-----


Witam.

Od 24h nie mogę spokojnie spać :/ Chce stworzyć prostą grę przeglądarkową za pomocą WebSocket'u. Problem polega na tym, że nie mogę odczytać po stronie serwera danych binarnych.

Tak client wysyła dane:

[JAVASCRIPT] pobierz, plaintext
  1. a = new ArrayBuffer(21);
  2. b = new DataView(a);
  3. b.setUint8(0, 16);
  4. b.setFloat64(1, Q, !0);
  5. b.setFloat64(9, R, !0);
  6. b.setUint32(17, 0, !0);
  7. l.send(a);
[JAVASCRIPT] pobierz, plaintext


Po stronie serwera próbuje odczytać dane za pomocą funkcji unpack, ale jak Boga kocham mi to nie wychodzi, a próbowałem prawie wszystkich możliwości :/ Otrzymane dane nie są poprawne. Co robię źle?

Z góry dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Xelah
post
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


1.
Kod
b.setUint8(0, 16);
to jest BI, a cała reszta to LI. Po co?
2.
Kod
!0
a dlaczego nie
Kod
true
? Próbujesz kogoś z równowagi wyprowadzić?
3. Pokaż czego próbowałeś i jaki był rezultat. Wtedy może ktoś Ci będzie w stanie pomóc.
Go to the top of the page
+Quote Post
Nicc0
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 18.01.2013

Ostrzeżenie: (0%)
-----


1. A no dlatego, że "l" to WebSocket to nim wysyłam dane.

[JAVASCRIPT] pobierz, plaintext
  1. l = new WebSocket(ip);
  2. l.binaryType = "arraybuffer";
  3. l.onopen = Open;
  4. l.onmessage = Msg;
  5. l.onclose = Close;
  6. l.onerror = function() {
  7. console.log("socket error")
  8. }
[JAVASCRIPT] pobierz, plaintext


"b" służy do odczytywania i zapisywania. Sam ArrayBuffer na to nie pozwala (Więcej tutaj: klik)

2. Co za różnicy czy wpisze !0 lub true, albo 0 i false, skoro to jest to samo. Tak mnie nauczono w szkole :/ Ale znając polską oświatę, pewnie okaże się, że jednak jest różnica.

3. Próbowałem różnych formatów, każdy z nich zwracał randomowe znaki. Tutaj jest wina na 100% z funkcją unpack(), nie umiem po prostu ustawić dobrego formatu.

Z resztą dałem sobie spokój z binarnym wysyłaniem danych. Użyłem JSON'a, w przyszłości zobaczę czy serwer daje rade z otrzymywanymi danymi i równoczesnym wysyłaniem ich, jeśli nie to będzie mnie czekała optymalizacja :/

Ten post edytował Nicc0 18.05.2015, 15:05:31
Go to the top of the page
+Quote Post
Xelah
post
Post #4





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


Ad.1. Nie zrozumieliśmy się. Ja pisałem o byte order, ale widzę, że to mój błąd. Pierwsza funkcja zapisuje 8 bit więc to bez znaczenia.
Ad.2. !(123-123), !false, !(!true-false) itd., itp. Można wymyślić miliardy sposobów na zapis czegoś tak oczywistego jak proste i jakże wymowne boolowskie true. Ale ja się tam tam nie znam a i na pewno nie będę się wykłucał ze szkolnymi autorytetami smile.gif
Ad.3. Problem nie jest w funkcji unpack ani w wysyłce na serwer. Problem w tym, że nie wiesz co i jak wysyłasz i nie wiesz jak to odczytać.

Ale skoro nie jest ci to już potrzebne, to temat można pewnie zamknąć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:02