Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][WebSocket] Problem z unpack
Forum PHP.pl > Forum > Przedszkole
Nicc0
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
Xelah
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.
Nicc0
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 :/
Xelah
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ąć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.