#programowanie #sieci #siecikomputerowe #jezykc #winsock #socket Hej Mireczki, czy Ktoś z Was ogarnia bibliotekę socket?

Chodzi mi tutaj o podstawową funkcję connect(), czy można ją wykorzystać do tego aby połączyć się z adresem 8.8.8.8 potwierdzając tym samym że mamy dostępne połącznie interenetowe? Gdzieś przeczytałem że to wystarczy - taki prosty PING. Jednak kiedy oglądałem źródła komendy ping.c to tam nie
@PlugaweWarzywo: SIOCGIFCONF to ci powie jaki masz adres IP na karcie sieciowej. Jest to za mało żeby stwierdzić czy masz połączenie z internetem. To nawet nie mówi ci czy masz poprawną komunikację z najbliższym routerem, bo przecież te adresy można ustawiać ręcznie i w cale nie muszą być poprawne.

Jedyny sposób na sprawdzenie czy faktycznie masz połączenie z internetem to wysłanie zapytania w ten internet i oczekiwanie że otrzymasz odpowiedź.
  • Odpowiedz
#cpp #winsock Dzień dobry. Chciałem się zapytać o gniazda, ponieważ utknąłem na odbieraniu danych. Program działa "prawie" jak serwer www: przyjmuje dane i odsyła do przeglądarki 200 OK + nagłówki od CORS (dlatego prawie, nie potrzebne mi jest parsowanie urli, wywoływanie php itd). Obecnie gniazdo ustawione jest na nieblokowalne i pojawia się problem w tym, że od czasu do czasu zaraz po nawiązaniu połączenia recv() przyjmuje wartość -1,
@ly000: Czekać, czyli lecieć z while aż pojawią się dane?

Może i racja z blokowaniem. Tylko jedno pytanie dodatkowo: czy OPTIONS oraz POST mają iść na tym samym gnieździe? Czy raczej odbieramy OPTIONS, odsyłamy przeglądarce nagłówki jakich chce i się rozłączamy?
  • Odpowiedz
@ly000: Dziękuję :) Debilem jestem :P Tylko tak dla pewności: robimy retval = recv(), sprawdzamy w otrzymanym buforze jakie są nagłówki html i wyciągamy (int)content-length, jak tylko suma retval będzie większa niż content-length to odsyłamy własne nagłówki html razem z body i robimy shutdown(socket). Zgadza się?
  • Odpowiedz
@InformatycznyNoobek:
Ja pierdziele co za studia... Teraz już prawie każdy używa się jakiejś biblioteki, w C++ przykładowo ASIO.
Po za tym jeżeli masz takie problemy to te studia nawet teorii nie uczą.

Co do prośby to ci nie pomożemy bo nie wiemy co za pakiety dostajesz, pakiety w TCP nie mają konkretnej określonej długości, mogą się dzielić, dlatego określa się tą transmisję jako strumieniową.
Jak odczytujesz pakiet to musisz wiedzieć
  • Odpowiedz
#socket #winsock #programowanie #cplusplus

Piszę właśnie (w winsock c++) serwer oraz klienta UDP. korzystam z strony, którą mi tutaj kiedyś poleciliście.

Mógłby ktoś to przetłumaczyć na bardziej zrozumiały dla laika w sieciówce język? wolałbym uniknąć wchodzenia na tematy jądra, deskryptorów, chyba że na prawdę jest to konieczne.
Patrząc po kodach serwerów i klientów które dostałem od znajomych wniosek który mi się nasunął jest
MlodyInformatyk - #socket #winsock #programowanie #cplusplus


Piszę właśnie (w wi...

źródło: comment_I1B9lZqeDDffe8uyaGoWzv9OSsQFpm9v.jpg

Pobierz
pewnie coś przekręcę, ale:
bind - powoduje że inne sockety mogą się łączyć do twojego, powiedzmy że to stawia serwera.
connect - łączy się do jakiegoś serwera, który ma zbindowane jakiś adres, zazwyczaj się ten adres gdzieś ustala do którego się łączysz.

Więc mniej-więcej tak, bind dla serwera, connect dla clienta.

Ale ja piszę w javie, więc się pewnie nie znam :D Ja mam po prostu ServerSocket który binduje, i zwykły socket
  • Odpowiedz
@MlodyInformatyk: Wychodzący socket też czasem przydaje się zbindować na konkretny port (i IP jeśli maszyna ma kilka). Może być tak, że firewalle są otwarte tylko dla konkretnego IP i zestawu portów. Wtedy wychodząc z randomowego portu może cię nie przepuścić.
  • Odpowiedz
@MlodyInformatyk:
to (jest też PL wersja, ale polecam oryginał), a później to. Bonus - nauczysz się pisać niezależnie od systemu, a sockety z tego co wiem dość łatwo przepisuje się na winsock.

Te materiały z 1 linku są na tyle proste, że w 1 dzień powinieneś ogarnąć sockety. Dodatkowo też inne języki (np. python) też mają podobne API do socketów, więc za jednym zamachem ogarniesz bardzo szeroki temat.
  • Odpowiedz