Un exemplu de aplicație simplă client-server pe java

Client-server este o arhitectură foarte comună și logică a aplicațiilor. Mi se pare că astăzi este rar să găsești o aplicație independentă pentru client. Prin urmare, am decis să iau în considerare un exemplu de construire a unei aplicații client-server în Java fără referire la o anumită sarcină. Mai întâi, treceți scurt structura de clasă a aplicației, atunci vom analiza o implementare separată a fiecărei clase. La sfârșitul articolului, voi da o legătură pentru a descărca arhiva cu structura de aplicație terminată. Deci, să începem.

Principalele componente ale aplicației

Principalele componente, desigur, sunt direct clientul și serverul. Cu toate acestea, pe lângă acestea, este necesar un pachet de clase auxiliare, care, în cel mai simplu caz, va fi responsabil pentru schimbul de mesaje între client și server. Configurația minimă necesară pentru o clasă: MessageReader / MessageWriter (citește / scrie un mesaj în fluxul de pe soclu), MessageFactory (care conține ID-urile tuturor mesajelor posibile), un set de mesaje de cerere (cerere) și un mesaj de set-și-răspuns (Response). Toate acestea vor fi plasate în pachetul "core", care trebuie să aibă atât un client cât și un server.

Luați în considerare structura de clasă a întregului proiect și apoi continuăm implementarea.

Structura clasei aplicației client-server

Cod sursă pentru clientul Java

Pentru a face față cu clientul mult mai ușor, el face în esență nimic super-sofisticat, pur și simplu creează un socket și se conectează la un server socket folosind gazdă ligament: port. Lansatorul creează un obiect al clasei Client și începe să funcționeze. Citez codul sursă fără a importa, pentru orice IDE pe care le conectați (cei care scriu în Java știu exact ceea ce este foarte dificil, fără IDE). În plus, la sfârșitul articolului veți putea descărca arhiva cu acest proiect.

ClientLauncher.java

Client.java

Prin cuvintele "logica aplicației" înțeleg protocolul de mesagerie cu serverul, transmiterea oricăror date pentru atingerea scopului final.

Codul sursă al serverului în Java

Permiteți-mi să vă reamintesc că clasa ClientSession descrie algoritmul principal de lucru cu clientul, mesajele, datele și așa mai departe. Clasa Context conține informații generale pentru toți clienții serverului, de exemplu, modalități de salvare a jurnalelor.

ServerLauncher.java

Server.java

Context.java

ClientSession.java

SessionsManager.java

Clase auxiliare din pachetul de bază

Voi pune toate clasele auxiliare sub o pisică, numele clasei se potrivește exact cu numele din lista "structura de clasă" de mai sus, pe care le puteți defini pachetul fiecărei clase.

Câteva cuvinte despre mesaje, clasele Cerere și răspuns sunt abstracte și joacă rolul clasificatorilor de mesaje. Datorită acestui fapt, este foarte convenabil să se facă distincția între "cereri" și "răspunsuri". În acest exemplu, am dat doar un mesaj - Handshake. care este responsabil pentru prima "strângere de mână" a clientului și a serverului. Toate mesajele ulterioare trebuie înregistrate în clasa MessageFactory, urmând exemplul celor două.

concluzie