Własny protokół komunikacyjny, komunikacja serwer klient oparta na socketach.

0

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

1

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.

2

Nie jestem może specem od tworzenia takich rzeczy, ale tak jakbym mógł podsumować kilka rzeczy:

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

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

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

  4. 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ą.

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

1

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.

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