Witam
Na studiach dostaliśmy zadanie opracowania własnego protokołu komunikacyjnego i stworzenie czegoś w rodzaju czatu dla dwóch klientów. Chętnie przyjmę materiały na temat tworzenie protokołów komunikacyjnych i tworzeniu aplikacji serwerowych i klientów języki w jakim mamy to wykonać jest dowolny ale wraz z kolegą z grupy zdecydowaliśmy się na c++, jeśli w inny języku to zadanie by było prostsze to również proszę o podpowiedź. Z góry dzięki :)
- Rejestracja:ponad 9 lat
- Ostatnio:około 2 miesiące
- Postów:316



- Rejestracja:prawie 23 lata
- Ostatnio:około 2 godziny
Stworzenie protokołu to prosta sprawa - musisz tylko zrobić sobie dokumentację, że będziesz słał np. takie bajty, a pierwszy oznacza to, następny oznacza to; że masz tutaj bajty liczące sumę kontrolną, ją się liczy jakoś tak. Albo możesz mieć protokół tekstowy - aby pobrać dane należy wysłać "GET / HTTP/1.0", a potem mogą być nagłówki żądania... przejrzyj najłatwiej mówiąc dokumentacje istniejących protokołów, np. HTTP albo XMPP (skoro to chat).
Kiedyś napisałem sobie implementację takiego pseudo "protokołu" - tj. powiedziane było, że wysyłany jest najpierw uint
, który mówił ile będzie bajtów potem przesłanych, a potem te bajty właśnie. I zresztą zrobiłem w ten sposób chat.

- Rejestracja:około 13 lat
- Ostatnio:3 dni
- Postów:174
Nie jestem może specem od tworzenia takich rzeczy, ale tak jakbym mógł podsumować kilka rzeczy:
-
Cóż C++ to dość dobry wybór do programowania takiego czegoś, ale np GUI czy interfejs użytkownika łatwiej było by zrobić w C#, do C++ można użyć w tym celu QT, WinApi, lub GTK (GTK można używać zarówno na linuxie, jak i istnieje port na windowsa), osobiście do tworzenia okienek w c++ polecałbym QT jeżeli to nie problem.
-
Tutaj protokół czyli masz na myśli opracowanie metody i wymagań wedle których Klient będzie się komunikował z serwerem, czyli ogólnie budowę/strukturę pakietów, no bo wiadomo , że protokół komunikacyjny to trzeba wybrać TCP, gdyż zapewnia on strumieniowość i pewność przesłania danych.
-
Do tego najlepiej wykorzystać po prostu WinSock (zakładam, że to ma być na windows).
Tutaj jest w miarę dobry tutorial do WinSock'a - http://www.binarytides.com/winsock-socket-programming-tutorial/
Oczywiście jeżeli chcesz zrobić chat na wiele klientów, bo tak by było najlepiej, że masz server centralny a klient chatu się łączy trzeba użyć wtedy wątkowania, aby obsługiwać wiele połączeń m.i.n w serwerze, więc Windows Threading też byś musiał sobie ogarnąć. https://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx
Pamiętaj , że TCP jest strumieniowy, więc rozmiar otrzymywanych pakietów przy odebraniu rcv może być w sumie dowolny - https://pl.wikipedia.org/wiki/Algorytm_Nagle%27a -
Jeżeli nie chcesz używać WinSock, to możesz spróbować pobawić się biblioteką RakNet - http://www.jenkinssoftware.com/download.html
RakNet dość ułatwia sprawę, jak pamiętam nie musiałbyś np stosować wątków i obsługę wielu połączeń miałbyś prawie , że zrobioną. -
Pakiety powinno się robić mniej więcej tak,
bajt 0: 0xAA - nagłówek
bajt 1: ID wiadomości
bajt 2-: rozmiar pakietu
bajt 3..-? - dalsze dane
QTcpSocket
i QTcpServer
. Tworzenie wątków funkcją CreateThread
to też niezbyt fortunny pomysł wiedząc, że w C++ jest klasa std::thread
, już nie wspominając o Qt (jeśli będzie użyte).

- Rejestracja:prawie 21 lat
- Ostatnio:7 dni
- Postów:700
Po niemiecku ale kod rozczytasz ;)

- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:11
Polecam zapoznać się z Beej's guide to network programming http://beej.us/guide/bgnet/output/html/multipage/index.html (dostępny także po polsku: http://www.asawicki.info/Mirror/Beej_s%20Guide%20to%20Network%20Programming%20PL/bgnet.pdf)
To jest MUST READ dla każdego początkującego sieciowego programisty :) Jest tam ładnie wszystko opisane oraz podstawowa struktura programu do radzenia sobie z wieloma użytkownikami, różnymi wielkościami otrzymanych pakietów, etc. Polecam także poczytać o buforach kołowych, które ułatwiają życie.