Na początku pragnę zastrzec, że jestem amatorem i moja znajomość środowiska Builder C++ pozwala mi na tworzenie podstawowych programów. Już od jakiegoś czasu piszę w tym IDE (od jakieś 1.5 roku).
Jesteście chyba jedynymi Polakami dobrze obeznanymi z tym środowiskiem, więc postanowiłem zadać wam kilka pytań.
Od jakiegoś czasu na innym forum robiony jest projekt. Polega on na tym, że jedna osoba tworzy "aplikację-serwer" do gry karcianej, a my tworzymy do niego "programy-klientów". Korzystam z komponentów INDY - TidTCPClient i TidTCPServer
1. Moje wstępne próby połączenia się z klientem zakończyły się powodzeniem. Udało mi się także odebrać dane z serwera, z czego bardzo się cieszę. Ale napotkałem parę problemów. Mianowicie kolega z forum poinformował mnie, że serwer odbiera komunikaty w postaci tablicy bajtów. Nie słyszałem nigdy o tym, więc pogrzebałem trochę w dokumentacji i znalazłem TByteDynArray. Udało mi się wysłać tą tablicę, jednak mimo to serwer nie odebrał komunikatu. Niestety, kodu nie mogę przytoczyć, ponieważ zaginął, a nie pamiętam jak go odtworzyć. Proszę tylko o pomysły na rozwiązanie tego zdarzenia.
2. Przy odbieraniu komunikatów z "programu-serwera" za pomocą funkcji Read...
- Kod: Zaznacz cały
UnicodeString komunikat = AContext->Connection->Socket->ReadString(19); //Dla zdarzenia Execute
...trzeba podać liczbę znaków, które chcemy wyciągnąć z bufora. Możliwe, że liczba znaków będzie się zmieniać, tak więc jakiej funkcji użyć, aby wyciągnąć wszystkie znaki z bufora?
3. A teraz z innej beczki - korzystanie z protokołu UDP. Wysyłanie się powiodło, jednak mam problem z odczytem. Mianowicie UDPServer ma ustawiony ThreadedEvent na true, ale funkcja ONUDPRead raz działa, a raz nie działa. Tak na zmianę. Nie mam pojęcia co zrobić, aby za każdym razem pobierała znaki ze strumienia.
- Kod: Zaznacz cały
void __fastcall TForm2::Server_UDPUDPRead(TIdUDPListenerThread *AThread, TBytes AData,
TIdSocketHandle *ABinding)
{
TIdBytes buf;
TIdPort port;
String IP;
buf.Length = 1200;
String count = Server_UDP->ReceiveBuffer(buf,IP,port,IdTimeoutDefault);
Edit3->Text = count;
} //Wszystko robione na sucho, więc niektóre zmienne są stałe
4. A teraz to w ogóle odbiegnę od tematu. Chciałbym się nauczyć obsługi tego środowiska. Niestety, IDE nie należy do najsławniejszych, więc informacji na jego temat w internecie jest mało, tym bardziej w języku polskim.
Nie miałem wyboru - wziąłem się za dokumentację. Niestety, jak to dokumentacja, wszystko było opisane na sucho, po jednym, dwóch zdaniach. Mimo tego, że wiem za co odpowiedzialna jest niby ta funkcja, to nie wiem jak ją wykorzystać w kodzie, co trzeba zrobić, aby zamierzone działanie programu się powiodło i jakich wszystkie funkcje są do tego niezbędne. Jestem pełen podziwu do waszych umiejętności programistycznych, a w szczególności Barona. Skąd wy bierzecie taką wiedzę? Macie na to jakiś sposób?
Co do kodu proszę o łopatologiczne wytłumaczenie i najlepiej ze wstawkami kodu (zaznaczam, że nie jestem z tych ludzi, którzy oczekują gotowca. Ale jeśli macie chwilę czasu - nie pogardzę).
A teraz kodzik dla klienta:
http://wklej.org/id/533616/
A teraz chyba najważniejsze - instrukcja kolegi dot. danych wysyłanych i oczekiwanych przez serwer (mam nadzieję, że się nie obrazi, jeśli to upublicznię):
http://wklej.org/id/533618/
Z góry dziękuję.
'Jestem laikiem - ale chciałbym się czegoś nauczyć '