Narzędzia użytkownika

Narzędzia witryny


sk2:java

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:java [2022/11/23 12:45]
jkonczak [UDP]
sk2:java [2023/12/01 13:08] (aktualna)
jkonczak [Zadania]
Linia 67: Linia 67:
  
 ==Serwer== ==Serwer==
-Serwer UDP od klient różni się tym, że używa [[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​net/​DatagramSocket.html#​%3Cinit%3E(int)|konstruktora przyjmującego numer portu]] lub metody ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​net/​DatagramSocket.html#​bind(java.net.SocketAddress)|bind]]''​+Serwer UDP od klient różni się tym, że używa [[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​net/​DatagramSocket.html#​%3Cinit%3E(int)|konstruktora przyjmującego numer portu]] lub metody ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​net/​DatagramSocket.html#​bind(java.net.SocketAddress)|bind]]''​
  
 ==Multicast== ==Multicast==
-Multicast używa klasy ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​net/​MulticastSocket.html|MulticastSocket]]''​ która jest klasą ''​DatagramSocket''​ wzbogaconą o kilka metod, m. inn. dołączenie do grupy:+Multicast używa klasy ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​net/​MulticastSocket.html|MulticastSocket]]''​ która jest klasą ''​DatagramSocket''​ wzbogaconą o kilka metod, m. inn. dołączenie do grupy:
 <code java> <code java>
 MulticastSocket socket = new MulticastSocket(1313);​ MulticastSocket socket = new MulticastSocket(1313);​
Linia 90: Linia 90:
 </​code>​ </​code>​
 ++++ ++++
- 
-<​html><​small></​html>​ 
-Użycie IP multicast w BSD socket API: [[sk2:​multicast_example]]\\ 
-Lista grup mcastowych do których jest zapisany komputer: ''​ip maddr''​ lub ''​netstat -ng''​ lub ''​cat /​proc/​net/​igmp''​ 
-++++ Użycie programu socat do testowania multicastu: | 
-Zajęcia w laboratorium:​ 
-<code bash> 
-socat UDP-DATAGRAM:​239.0.0.1:​2000,​reuseaddr,​bind=0.0.0.0:​2000,​ip-add-membership=239.0.0.1:​enp3s0 STDIO 
- 
-# UDP-DATAGRAM:​239.0.0.1:​2000 → wysyłaj datagramy do podanego adresu (239.0.0.1:​2000) i odbieraj co przyjdzie 
-# reuseaddr → włącze SO_REUSEADDR;​ pozwala wielu programom na tym samym komputerze używać tego samego portu do mcastu 
-# ip-add-membership=239.0.0.1:​enp3s0 → dołącza do grupy mcastowej 239.0.0.1 na urządzeniu enp3s0 
-# bind=0.0.0.0:​2000 → wykonaj bind na podany adres; pod tym adresem będą odbierane datagramy 
-</​code>​ 
- 
-Zajęcia zdalne: 
-<code bash> 
-socat UDP-DATAGRAM:​239.0.0.1:​2000,​reuseaddr,​bind=0.0.0.0:​2000,​ip-add-membership=239.0.0.1:​tap0,​ip-multicast-if=10.0.9.X STDIO 
- 
-# UDP-DATAGRAM:​239.0.0.1:​2000 → wysyłaj datagramy do podanego adresu (239.0.0.1:​2000) i odbieraj co przyjdzie 
-# reuseaddr → włącze SO_REUSEADDR;​ pozwala wielu programom na tym samym komputerze używać tego samego portu do mcastu 
-# ip-add-membership=239.0.0.1:​tap0 → dołącza do grupy mcastowej 239.0.0.1 na urządzeniu tap0 
-# bind=0.0.0.0:​2000 → wykonaj bind na podany adres; pod tym adresem będą odbierane datagramy 
-# ip-multicast-if=10.0.9.X → nakazuje wysyłać wiadomości do grupy multicastowej z podanego adresu ​ 
-</​code>​ 
-++++ 
-<​html></​small></​html>​ 
  
 ==== Zadania ==== ==== Zadania ====
Linia 122: Linia 95:
 Przypomnienie wątków i synchronizacji w  Javie: Przypomnienie wątków i synchronizacji w  Javie:
 [[https://​docs.oracle.com/​javase/​tutorial/​essential/​concurrency/​locksync.html|synchronized (czyli zamki)]] \\ [[https://​docs.oracle.com/​javase/​tutorial/​essential/​concurrency/​locksync.html|synchronized (czyli zamki)]] \\
-[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​util/​concurrent/​package-summary.html|java.util.concurrent]] \\+[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​util/​concurrent/​package-summary.html|java.util.concurrent]] \\
 nowy wątek, używając lambdy: nowy wątek, używając lambdy:
 <code java> <code java>
Linia 132: Linia 105:
  
  
-//Zadanie 1.// Napisz klienta TCP z użyciem ''​java.io''​ i wątków. \\ (Możesz skorzystać z szablonu kodu z TODO's do zrobienia: {{:sk2:tcpclienttemplate.java|TcpClientTemplate.java}})+//Zadanie 1.// Napisz klienta TCP z użyciem ''​java.io''​ i wątków. \\ (Możesz skorzystać z szablonu kodu z TODO's do zrobienia: {{:sk2:TcpClientTemplate.java|tcpclienttemplate.java}}) ​
  
 //Zadanie 2.// Napisz program odbierający i wysyłający wiadomości UDP od/do grupy multicastowej z użyciem ''​java.io''​ i wątków. //Zadanie 2.// Napisz program odbierający i wysyłający wiadomości UDP od/do grupy multicastowej z użyciem ''​java.io''​ i wątków.
 +
 +[[sk2:​qt#​ip_multicast_-_przypomnienie| IP multicast - przypomnienie i komendy do testowania]]
  
 <​html><​small></​html>​ <​html><​small></​html>​
Linia 146: Linia 121:
 ==== Klasy obsługujące gniazda (kanały) ==== ==== Klasy obsługujące gniazda (kanały) ====
 Ważne klasy (sieciowe): Ważne klasy (sieciowe):
-  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​nio/​channels/​SocketChannel.html|SocketChannel]]''​ – gniazdo TCP (//​connect//,​ klient) +  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​nio/​channels/​SocketChannel.html|SocketChannel]]''​ – gniazdo TCP (//​connect//,​ klient) 
-  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​nio/​channels/​ServerSocketChannel.html|ServerSocketChannel]]''​ – gniazdo TCP (//​listen//,​ serwer) +  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​nio/​channels/​ServerSocketChannel.html|ServerSocketChannel]]''​ – gniazdo TCP (//​listen//,​ serwer) 
-  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​nio/​channels/​DatagramChannel.html|DatagramChannel]]''​ – gniazdo UDP +  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​nio/​channels/​DatagramChannel.html|DatagramChannel]]''​ – gniazdo UDP 
-  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​nio/​channels/​Selector.html|Selector]]''​ – multiplekser+  * ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​nio/​channels/​Selector.html|Selector]]''​ – multiplekser
 Obiekty z tych klas są tworzone metodą statyczną ''​open()'',​ np: Obiekty z tych klas są tworzone metodą statyczną ''​open()'',​ np:
 <code java> <code java>
Linia 183: Linia 158:
 ==== Bufory ==== ==== Bufory ====
  
-NIO używa dedykowanych klas buforów – np. ''​[[https://​docs.oracle.com/​en/​java/​javase/​19/​docs/​api/​java.base/​java/​nio/​ByteBuffer.html|ByteBuffer]]''​. Klasy te służą opakowaniu tablic (np. tablicy bajtów) w sposób nie ograniczający wydajności.+NIO używa dedykowanych klas buforów – np. ''​[[https://​docs.oracle.com/​en/​java/​javase/​21/​docs/​api/​java.base/​java/​nio/​ByteBuffer.html|ByteBuffer]]''​. Klasy te służą opakowaniu tablic (np. tablicy bajtów) w sposób nie ograniczający wydajności.
  
 Bufor można tworzyć metodami statycznymi,​ np. ''​ByteBuffer.allocate()''​ i ''​ByteBuffer.wrap()''​. Bufor można tworzyć metodami statycznymi,​ np. ''​ByteBuffer.allocate()''​ i ''​ByteBuffer.wrap()''​.
Linia 412: Linia 387:
 ==== Zadania ==== ==== Zadania ====
  
-//Zadanie 4.// Pobierz kod prostego serwera key-value store: {{:​sk2:​simplekv.java|SimpleKV.java}}.+//Zadanie 4.// Pobierz kod prostego serwera key-value store: {{:​sk2:​simplekv.java|simplekv.java}}.
 <​html><​small>​      </​html>​ <​html><​small>​      </​html>​
 ([[https://​en.wikipedia.org/​wiki/​Key-value_database]]) ([[https://​en.wikipedia.org/​wiki/​Key-value_database]])
sk2/java.1669203957.txt.gz · ostatnio zmienione: 2022/11/23 12:45 (edycja zewnętrzna)