Materiały dot. programowania sieciowego w c++

Materiały dot. programowania sieciowego w c++
MI
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:85
0

Jestem teraz na etapie lektury książki ,,Programowanie wieloplatfromowe z wxwidgets i c++". Chcę zrobić prosty komunikator a la gadu gadu. Czy znacie może jakieś dobre źródło na ten temat? Nie chodzi mi oczywiście o tutorial prowadzący za rączkę.
Bo na razie nie do końca rozumiem koncepcji czy pierwszy program ma być serwerem, czy klientem, a może każdy z programów ma być jednocześnie klientem i serwerem. I jak to powiązać z wątkami.
Chcę zrobić tak, żeby najpierw można było na kompie odpalać obie wersje i przetestować między portami komunikację, potem żeby w jednej sieci np. wiif można było się komunikować, a na końcu dodać jakieś szyfrowanie do tego.
Z góry dziękuję za każdą pomoc.

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:2 minuty
4

Jeżeli nic nigdy jeszcze nie robiłeś to BJ's Guide to Network Programming to miejsce od którego zaczynasz. Z pytaniami wróć, jak już przeczytasz ;)


edytowany 1x, ostatnio: several
MI
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
1

Dobra rada na razie omijaj wątki szerokim łukiem.
Skup się na jednym temacie na sieciach.

Dlaczego odradzam ci programowanie wielowątkowe?
Bo jest bardzo niedeterministyczne. Coś co u ciebie będzie działać zawsze u kogoś innego rzadko będzie w ogóle działać. Bugi wielowątkowe sąa trudne w lokalizacji analizie i naprawie.
Pułapki w programowaniu wielowątkowym potrafią być bardzo subtelne.

Z własnej obserwacji zważyłem, że 90% deweloperów twierdzących, że znają się na programowaniu wielowątkowym, nie zdaje sobie sprawy jak wiele rzeczy nie rozumieją w tym temacie.

Na temat sieci w wxwidgets raczej nic ci nie zaproponuje. Preferuję Qt.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
MI
A w qt łatwo się pisze komunikację sieciową?
kq
Hehe, pisałem o tym w poprzednim Programiście. Całkiem łatwo, osobiście preferuję ten styl nad Boost.ASIO, ale i w tym jest całkiem wygodnie.
MI
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:85
0
MarekR22 napisał(a):

Dobra rada na razie omijaj wątki szerokim łukiem.
Skup się na jednym temacie na sieciach.

Dlaczego odradzam ci programowanie wielowątkowe?
Bo jest bardzo niedeterministyczne. Coś co u ciebie będzie działać zawsze u kogoś innego rzadko będzie w ogóle działać. Bugi wielowątkowe sąa trudne w lokalizacji analizie i naprawie.
Pułapki w programowaniu wielowątkowym potrafią być bardzo subtelne.

Z własnej obserwacji zważyłem, że 90% deweloperów twierdzących, że znają się na programowaniu wielowątkowym, nie zdaje sobie sprawy jak wiele rzeczy nie rozumieją w tym temacie.

Na temat sieci w wxwidgets raczej nic ci nie zaproponuje. Preferuję Qt.

wxWidgets wspomniałe, bo akurat czytam tę książkę i fajnie się pisze, chociaż konfiguracja potrafi zdenerwować. Nie do końca też rozumiem jak działa komunikacja po sieci gdzie są adresy ipv6. Bo jak mamy ipv4 to spoko wpisujemy adres ip i port. Ale jak rozwiązać problem, że po uruchomieniu programu i mamy na liście tego użytkownika na drugim kompie, to wziąć jego adres, skoro w sieci jest dynamiczne przydzielanie adresów?

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Po broadcaście wyślij zapytanie o przedstawienie się innych komunikatorów.

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Mirai napisał(a):

wxWidgets wspomniałe, bo akurat czytam tę książkę i fajnie się pisze,

Yyyyy ??? Dla mnie to takie wieloplatformowe MFC, wszechwładne makra, i ignorowanie większości istotnych postulatów OOP
Bleee.


Bo C to najlepszy język, każdy uczeń ci to powie
MI
Mi pasuje sposób pisania aplikacji w wx i fakt, że można to samo skompilować na windowsie, linuxie i mac'ach. Jedynym ignorowaniem jakie znalazłem to liczba argumentów, bo jest wiele funkcji czy konstruktorów gdzie argumentów nie ma 2-3 tylko np. 5, 6 albo nawet 8.
06
Z tym MFC nie przesadzałbym. O wiele wygodniej się pisze w wxach.
MI
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:85
0
0x666 napisał(a):

Po broadcaście wyślij zapytanie o przedstawienie się innych komunikatorów.

Nie rozumiem co masz na myśli. Broadcast masz na myśli wysłanie jakiegoś konkretnego pakietu?

AK
Nie to ma na myśli. Trochę uzupełnij teorię n/t sieci
nalik
  • Rejestracja:około 9 lat
  • Ostatnio:17 dni
  • Postów:1039
0
Mirai napisał(a):

Nie do końca też rozumiem jak działa komunikacja po sieci gdzie są adresy ipv6. Bo jak mamy ipv4 to spoko wpisujemy adres ip i port. Ale jak rozwiązać problem, że po uruchomieniu programu i mamy na liście tego użytkownika na drugim kompie, to wziąć jego adres, skoro w sieci jest dynamiczne przydzielanie adresów?

Zacznijmy od tego - po co Ci jego adres? Do nawiązania połączenia czy identyfikowania użytkowników?
Wytłumacz też w czym Ci przeszkadza dynamicznie przedzielanie adresów?
Chętnie bym rozwiał Twoje wątpliwości, ale nie bardzo rozumiem istotę problemu.

MI
Jeśli adresy się zmieniają to odpalając program komunikacyjny na jednym komputerze, skąd będę wiedział jak połączyć się z drugim komputerem jeśli nie znam jego adresu? Jak niby stworzę wtedy socket'a i ustanowię połączenie?
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

@Mirai: mam na myśli wysłanie pakietu UDP na adres rozgłoszeniowy sieci LAN. To, co tam wyślesz, to już zależy od twojego protokołu, może być zwykłe "hello\n" ;) Pozostałe komunikatory odbiorą tę wiadomość razem z adresem nadawcy, na który powinny też odpowiedzieć przykładowym "hello\n", by nadawca dostał adresy wszystkich aktywnych komunikatorów w sieci LAN. To tak w skrócie.

nalik
  • Rejestracja:około 9 lat
  • Ostatnio:17 dni
  • Postów:1039
0

Jeśli adresy się zmieniają to odpalając program komunikacyjny na jednym komputerze, skąd będę wiedział jak połączyć się z drugim komputerem jeśli nie znam jego adresu? Jak niby stworzę wtedy socket'a i ustanowię połączenie?

A jaka jest architektura twojego rozwiązania? Bo jeżeli jest to klient-serwer, to adres serwera po prostu powinieneś znać albo go uzyskać np. po nazwie hosta. Jeżeli działa na zasadzie P2P, to możesz dokonać wyszukiwania w podsieci, @_0x666_ zaproponował jak to zrobić.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.