Własny Protokół oparty o TCP

0

Szukam informacji jak można ułożyć własną ramkę TCP, tak aby powstał protokół oparty na TCP/IP.
Czy znacie jakieś dobre publikacje? Chciałbym dowiedzieć się jak układa się takie ramki w C#
Za pomoc, podpowiedź dziękuję.

0

Generalnie jest to proste. Projektujesz sobie ramkę. Wszystko tam kładziesz w nią - swoje dane + swoje nagłówki , potem taką całość ładujesz jako dane do ramki TCP. Dalej jak to prześlesz to odbierasz zwykłym tcp, po czym tworzysz obiekt klasy swojego protokołu od danych które w tcp doszły. Klasa ta powinna deserializować z bloba obiekt o nagłówki i właściwe dane. Sam etap odbierania w tcp i parsowania na obiekt, czy z obiektu, serializacja, a potem wysłanie via TCP, może być zorganizowane przez dziedziczenie lub kompozycje, że będzie ukryte dla programistów to używających, i oni będą mieć wrażenie, że tylko wkładają dane i "twoją" ramkę i idzie to właśnie tym protokołem. Pamiętajmy, że to wszystko jest warstwowe, np. taki HTTP też jest zbudowany na TCP. W twoich klasach powinien być też zaszyta sama sekwencja protokołu. Może być bezstanowy jak HTTP, a może być i stanowy - jak np. w drukarkach fiskalnych - jak drukarka wpadnie w pewien stan to protokół reaguje inaczej, idą ramki specyficzne dla protokołu drukarki, ale w warstwie transportowej to ciągle jest TCP/IP.

0

Nie różni się to niczym od serializowania i deserlaiizowania do/z pliku.
Jedyna rzecz, o której musisz pamiętać (a wielu popełnia ten błąd), to fakt, że jeśli po jednej stronie wyślesz np 257 batów, to nie ma gwarancji, że funkcja read po drugiej stronie od razu w jednym kawałku zwróci ci 257 bajtów. Więc jeśli twój nagłówek będzie zawierał informacje or rozmiarze ramki to musisz wziąć to pod uwagę.

Pamiętaj też o endianie.

0

Dziękuję za pomoc.
Chciałbym nakreślić problem z jakim mam zamiar się zmierzyć. Otóż chciałbym napisać protokół komunikacyjny z urządzeniem przemysłowym PLC (Programming Logic Controller) firmy Mitsubishi. Protokół to MELSEC Q Mitsubishi. Zadanie klienta TCP będzie polegało na wysłaniu ramki do urządzenia i odczytaniu z jego tablicy pamięci wartości np. INT lub REAL i zwrócenie wyniku klientowi TCP. Posiadam informacje o układzie ramki. Jest to urządzenie, które posiada wbudowany port Ethernetowy. Zastanawiam się czy korzystanie z TCPClient, Network Stream i Sockets wystarczy do wysłania takiej ramki. Czy budowanie takiej ramki polega na przesłaniu stringa przez strumień TCP/IP? Wiem, że urządzenie obsługuje binary jak i ASCII do odczytu zapisu danych.
Znacie może jakieś publikacje lub dokumentacje, które mogą mi w tym pomóc?

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