background image

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

background image

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

background image

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

background image

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

background image

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

background image

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.*

background image

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  

background image

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

background image

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

background image

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

background image

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


Document Outline