W tym artykule postaram się Wam wyjaśnić jak stworzyć prosty komunikator internetowy. Przedstawię jedynie działanie takiego komunikatora, nie będę podawał gotowego kodu źródłowego. Zakładam, że przeczytaliście już artykuł „Jak połączyć dwa komputery” i wiecie jak posługiwać się komponentami ClientSocket i TServerSocket.

Dobra… zaczynamy! W moim poprzednim artykule wyjaśniłem jak połączyć tylko dwa komputery (klienta z serwerem), teraz zajmiemy się serwerem który połączy kilka klientów.

Podejrzewam, że większość Was próbowała z serwerem (który napisaliśmy w artykule „Jak połączyć dwa komputery”) połączyć więcej niż jednego klienta. Efekt nie był zadowalający, bowiem gdy tak zrobimy, serwer będzie wysyłał wiadomość do ostatniego podłączonego klienta. Dzieje się tak, ponieważ zaprogramowaliśmy tak serwer! Ta linijka :

ma za zadanie wysłać do ostatniego „aktywnego połączenia”. Można się domyślić, że „ServerSocket.Socket.ActiveConnections” odpowiada za pobranie ilości podłączonych klientów. Jeśli zastosujemy pętle, serwer wyśle nam wiadomość do wszystkich klientów.

Stosując ten sposób otrzymamy prosty czat internetowy. Zmieniliśmy tylko kod źródłowy serwera, ale jeśli chcemy stworzyć komunikator musicie pogrzebać w kodzie źródłowym klienta. Trzeba wymyślić strukturę wysyłanego komunikatu do serwera. Powinien zawierać np. identyfikator (nick, id, itp.) osoby do której wysyła się tekst (żeby tekst nie był widziany przez wszystkich użytkowników), identyfikator osoby wysyłającej no i tekst który dana osoba chce wysłać. Przykład:

Potem tylko trzeba napisać prosty algorytm który odzieli dane, i przeszuka tabelę (z aktywnymi klientami) w poszukiwaniu danej osoby. Tabela powinna zawierać nick i „identyfikator” klienta (nick dla zidentyfikowania, a identyfikator do wysłania wiadomości, np.

Jak widać jest to dość proste i logiczne (przynajmniej dla mnie ;)). Ostatnio pisałem „ Komentator internetowy” podobny do tego co mają na Onet.pl – to jest przykładowe zastosowanie łączenia większej ilości klientów.

Pozdrawiam 🙂

Autor: Uno