Error: 10014

Wszystko fajnie i nawet powinno działać. Problem w tym że powinno można tu zastosować zamiennie z prawie a jak jest z tym drugim – wszyscy wiemy.

Co tym razem? Error 10014. WTF? Otóż to… Tutaj jest treść errora 10014:

WSAEFAULT: The system detected an invalid pointer address in attempting to use a pointer argument in a call.

Czyli że niby podaje zły adres… Ale gdzie?! Wywołanie recvfrom() wygląda na dobre i argumenty wszystkie są podefiniowane tak jak manual przykazał. Więc co jest źle? Tego być może nie dowiemy się w następnym odcinku…

EDIT: Rozwiązanie

Zaraz po napisaniu tego posta stwierdziłem, że jeszcze pogrzebie i odkryłem, że jednak nie można wyrzucić ostatniego argumentu z recvfrom() co wcześniej uczyniłem bo przecież wiem jaki rozmiar ma sockaddr_in. Poprzednio wstawiłem nam sobie NULL bo uważałem, że nie będę potrzebować tego argumentu… błąd… Ja go nie potrzebowałem, ale funkcja do działania owszem. Jako ostatni argument trzeba wstawić adres do zmiennej zawierającej sizeof(sockaddr_in) i wtedy wszystko działa.

Tym oto sposobem sprawiłem, że AGE potrafi już komunikować się ze światem poprzez UDP!

@Tarains: Napisałem już część ageNet, zadowolony? 😛

Reklamy

Problemy z UDP

O ile komunikację sieciową za pomocą TCP potrafię zakodzić bezbłędnie o tyle ni cholery nie mogę poradzić sobie z UDP. Co prawda wiadomości są odbierane – mam tylko problem z ich odczytaniem…

Być może mój błąd wynika właśnie z tego, że niezbyt się zajmowałem protokołem UDP… Tak czy inaczej dzieje się tak:

  1. Włączam program i chodzi on normalnie (sprawdza czy nie ma wiadomości i jak nie to idzie dalej)
  2. Wysyłam do programu kilka bajtów przez UDP
  3. Program odczytuje bezbłędnie i tutaj pojawia się dopiero problem. Od tego miejsca program staje i oczekuje na kolejne wiadomości. To zatrzymuje pętlę i oczywiście program nie reaguje zupełnie na nic…

Może ktoś ma jakiś pomysł co tutaj pomoże? Ja staram się coś na to poradzić, ale średnio mi idzie 😉

AGE – będą zmiany

Doszedłem do wniosku, że będę musiał zmodyfikować niektóre rozwiązania zastosowane w AGE – nie ze względu na wydajność ale estetykę 😉

Poza tym kilka drobnych modyfikacji w module odpowiedzialnym za testowanie kolizji da mi możliwość pokombinowania z detekcją typu okrąg-wielokąt i okrąg-okrąg. W aktualnej wersji obsługiwane są jedynie wielokąty.

No i na końcu będzie trzeba coś zrobić z detekcją błędów, która w tej chwili jest raczej prowizoryczna i zakłada raczej że wszystko będzie działać 😛

No i powróci nieśmiertelny temat ageNet! To straszne jak ciężko zebrać się do czegoś jeśli nie ma się bladego pojęcia jak powinno to wyglądać 😛 Postanowiłem napisać jak na razie prostą obsługę UDP, a później się zobaczy i pewnie dodam jeszcze TCP.

ageNet – wielki powrót? :)

Hmm, zapewne nie zdziwi was to specjalnie, ale dzisiaj też nic nie zakodziłem. Chyba zaczynam się starzeć 😉

Jak wracam do domu to tak mi się nie chce… zwłaszcza jeśli mam bardzo interesujący wykład o bezpieczeństwie i szyfrowaniu danych. Swoją drogą – czasem żałuję, że nie noszę poduszki na wydział…

Chyba powinienem się w końcu wziąć za ten obiecany już 100 lat temu moduł ageNet, ale przyznam się bez bicia że nie wiem jak powinien wyglądać jego interfejs. Bez tego nie da rady nic napisać choćbym nawet chciał 😉

Oglądałem już co daje SDL_Net i prawdę mówiąc doszedłem do wniosku, że to po prostu opakowany TCP, więc jeśli tak ma to wyglądać to  mogę to napisać choćby zaraz, ale wciąż myślę nad czymś ciekawszym. Jednak w jakikolwiek sposób bym tego nie zrobił oznaczałoby to ukierunkowanie obsługi sieci na jakiś konkretny typ gry (np. RTS albo coś ).

Co wy o tym sądzicie? Chyba jednak efekt całego mojego kombinowania będzie taki, że obuduję po prostu TCP i UDP w jakieś proste i ładne klasy, opatrzę to nazwą ageNet, dorzucę do AGE i będę miał z głowy 😛

ageNet?

Zaczynam powoli myśleć że nie dane mi jest napisanie modułu obsługi sieci do AGE. Oczywiście wbrew wszelkim przeciwnościom losu i tak powstanie, tylko strasznie irytujące jest to, ze żadna z dostępnych bibliotek nie spełnia moich oczekiwań, a kiedy już taka się znalazła to niestety nie mogę jej skompilować bo brakuje mi jakiejś biblioteki do SSL… Koszmar…

Popróbuję jeszcze dzisiaj trochę pokombinować i może da się olać SSL całkowicie bo i tak nie mam zamiaru go wykorzystywać.

Zależy mi na C++ Sockets Library bo z przykładów wnioskuję, że używa jej się wygodnie, a kod potrzebny do napisania prostego programiku sieciowego jest raczej krótki – w przeciwieństwie do innych bibliotek typu OpenTNL.

Wytłumaczenie

Ok, ostatnio trochę zaniedbałem stronę oraz sam piękny fach programistyczny. Dlaczego? Prawdę mówiąc sam chciałbym to wiedzieć. Zdaje się że brak mi pomysłu na napisanie modułu ageNet – o którym wspominałem na mojej poprzedniej stronie jak jeszcze działała…

Jeśli mam być szczery to nie wiem co taki moduł powinien udostępniać programiście bo sam nigdy z takiego nie korzystałem, a grę przez internet napisałem tylko jedną i to z użyciem czystych socketów 😉

Postanowiłem jednak zmienić istniejący stan rzeczy i zabrać się wreszcie za coś konkretnego. Ostatnio Tarains zmotywował mnie do tego, żeby odświeżyć nieco moją stronę internetową, a teraz przyszedł czas żebym sam wziął się do roboty 😉 Co przez to rozumiem? Otóż postanowiłem się przyjrzeć jak wygląda moduł SDL_Net i na jego podstawie napisać ten nieszczęsny ageNet – może wreszcie coś ruszy się do przodu 🙂