Materiały dot. programowania sieciowego w c++

Odpowiedz Nowy wątek
2020-02-20 16:16

Rejestracja: 4 miesiące temu

Ostatnio: 42 minuty temu

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.

Pozostało 580 znaków

2020-02-20 16:20

Rejestracja: 10 lat temu

Ostatnio: 2 minuty temu

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, 2020-02-20 16:21
Dziękuję! - Mirai 2020-02-20 16:21

Pozostało 580 znaków

2020-02-20 16:27

Rejestracja: 12 lat temu

Ostatnio: 1 minuta temu

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.
A w qt łatwo się pisze komunikację sieciową? - Mirai 2020-02-20 16:41
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. - kq 2020-02-24 17:30

Pozostało 580 znaków

2020-02-20 16:31

Rejestracja: 4 miesiące temu

Ostatnio: 42 minuty temu

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?

Pozostało 580 znaków

2020-02-21 10:30

Rejestracja: 14 lat temu

Ostatnio: 1 godzina temu

0

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

Pozostało 580 znaków

2020-02-21 14:54

Rejestracja: 1 rok temu

Ostatnio: 21 minut temu

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.

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. - Mirai 2020-02-21 14:59
Z tym MFC nie przesadzałbym. O wiele wygodniej się pisze w wxach. - _0x666_ 2020-02-21 19:09

Pozostało 580 znaków

2020-02-21 16:50

Rejestracja: 4 miesiące temu

Ostatnio: 42 minuty temu

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?

Nie to ma na myśli. Trochę uzupełnij teorię n/t sieci - AnyKtokolwiek 2020-02-21 17:07

Pozostało 580 znaków

2020-02-21 18:06

Rejestracja: 4 lata temu

Ostatnio: 3 dni temu

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.

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? - Mirai 2020-02-21 18:23

Pozostało 580 znaków

2020-02-21 19:06

Rejestracja: 14 lat temu

Ostatnio: 1 godzina temu

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.

Pozostało 580 znaków

2020-02-21 19:21

Rejestracja: 4 lata temu

Ostatnio: 3 dni temu

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

Pozostało 580 znaków

Odpowiedz

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