Materiały dot. programowania sieciowego w c++

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.

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 ;)

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.

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?

0

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

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.

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?

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.

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.

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ć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1