03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
1
Programowanie w Java 5
Wielowątkowość
Interfejs
Programowanie sieciowe
Serwer/Client
Dla Specjalizacji Systemy Informacyjne w
Gospodarce
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
2
Threads - Wątki
Dziedziczymy klasę z klasy Thread
Class MyThreadedClass extends Thread { ...
Posiada metody start i run
Metodę run przedefiniujemy wstawiając operacje które
chcemy wykonać w wątku
Nowy Wątek tworzymy przy pomocy operatora
new (tak jak inne obiekty) i aktywujemy wołając
metodę start
MyThreadedClass MyThr = new MyThreadedClass();
MyThr.start();
Metoda start z kolei (bez naszego udziału)
woła metodę run
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
3
Wady dziedziczenia z
Thread
Zwykle nasze klasy pochodzą od jekiejś
struktury klas
Zapewnia to dostęp do danych w tych klasach
Możemy używać metod zdefiniowanych w
klasach przodków
Chcielibyśmy móc używać tych samych
mechanizmów przy programowaniu
wielowątkowym ale:
musimy dziedziczyć z klasy thread
W Javie nie ma dziedziczenia od kilku klas
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
4
Interfajsy
Interfajs pozwala ominąć ograniczenie dziedziczenia od
jednej klasy
Interfajs można dziedziczyć z wielu interfejsów i można
dodać do klasy dziedziczonej z dowolnej klasy
Definiowanie interfajsu (przykład z java.lang)
public interface Runnable {
void run(); }
Definiuje abstrakcyjną metodę run
Użycie interfajsu
Class MyClass extends MySuperClass implements
Runnable {.... public void run() {.....} ....}
Musimy zdefiniować metodę run wymaganą przez
interfejs
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
5
Użycie interfajsu w
wątkach
Nie dziedziczymy z klasy Thread ale:
definiujemy obiekt typu Thread
Tworzymy obiekt z naszej klasy (
MyClass )
Możemy dziedziczyć skąd chcemy (n.p.
MySuperClass)
Musimy zaimplementować interfejs Runnable
MyClass MyObj=new MyClass();
Podajemy jako argument konstruktora nasz obiekt
Startujemy wątek (thread)
Thread thr=new Thread(MyObj);
Thr.start;
Thread thr zawoła metodę run naszego obiektu MyObj
zdefiniowaną w klasie MyClass
Mającą dostęp do danych i metod w
MySuperClass
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
6
Porty TCP
Porty są numerowane 0 .. 65536
Część jest zarezerwowana dla
określonych standartowych usług 0-
1023
Porty 48-64K są do użytku swobodnego
Podłączenie TCP do danego portu
nazywa się socket (gniazdko)
Należy użyć pakietu java.net.*
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
7
Koncepcja Klient/Serwer
Implementujemy dwa programy
Serwer
przesyła lub pobiera dane na żądanie klienta
Operacje są kontrolowane przez żądania klienta
Klient
inicjuje połączenie z serwerem i wymienia (pobiera
lub przesyła) dane z serwerem
Kontroluje przepływ informacji (wysyła komendy)
Nie jest istotne czy programy działają na
jednym czy na komputerach połączonych
internetem
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
8
Przykład klasy serwera
Serwer
import java.net.*;
class Server {
ServerSocket server;
Socket socket;
public DataInputStream in;
public PrintStream out;
Public Server(int port)
server=new ServerSocket(port);
socket=server.accept();
in = new
DataInputStream(socket.getInputStrea
m());
out = new PrintStream
(socket.getOutputStream());
Funkcje
SerwerSocket jest
zdefiniowany w pakiecie
java.net
Tworzymy obiekt serwer
nasłuchujący (accept)
na podanym porcie
Jeśli klient „podłączy
się” to otwieramy
socket
Pobieramy informacje
od klienta i
odpowiadamy
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
9
Program serwera
Program ServerTest
public class ServerTest {
final static int SERVER_PORT=8001;
Public static void main(String[] args) {
Server server;
String clientCmd;
server =new Server(SERVER_PORT);
while (!quit) {
clientCmd=server.in.readLine();
.....
server.out.println(„Odpowiedz...”);
}
}
Funkcje
Zwykły program Javy
z funkcją main
Definiujemy port n.p.
8001 i nie zmieniamy
(final)
Tworzymy server z
naszej klasy Server
Pobieramy i wysyłamy
tekst tak jakbyśmy
czytali lub pisali do
pliku
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
10
Przykład klasy klienta
Klient
Class Client {
public DataInputStream in;
public PrintStream out;
Socket client;
public Client(String host, int port)
{
client = new Socket(host, port);
in = new
DataInputStream(client.getInputStre
am());
out = new PrintStream
(client.getOutputStream());
}
}
Funkcje
Definiujemy obiekt
client który otwiera
połączenie do
servera
new Socket(host,
port)
Pobieramy
informacje od
klienta i
odpowiadamy
03/05/02
Programowanie Java 5 Copyri
ght Marek A. Chmielowski
11
Program clienta
Program ClientTest
public class ClientTest {
final static int SERVER_PORT=8001;
Public static void main(String[] args) {
Client client;
String clientCmd;
client =new Client(„localhost”,
SERVER_PORT);
while (!quit) {
client.out.println(„Wyślij...”);
.....
clientCmd=client.in.readLine();
}
}
Funkcje
Zwykły program Javy z
funkcją main
Definiujemy port
identyczny jak na
serwerze n.p. 8001 i nie
zmieniamy (final)
Tworzymy client z
naszej klasy Client
(łączy się z lokalnym
komputerem)
Wysyłamy i pobieramy
tekst tak jakbyśmy
czytali lub pisali do pliku