Mustaqil ish-1 Mavzu: “Java nio” Topshirdi: Sayipov Sh. T 416-20 guruh Qabul qildi: Abdullayev U


Download 137.97 Kb.
bet3/4
Sana31.01.2024
Hajmi137.97 Kb.
#1828770
1   2   3   4
Bog'liq
Sayipov SH tarmoq dasturlash fanidan 1-mustaqil ishi

Java NIO - Soket kanali


Java NIO soket kanali tanlanadigan kanal turi bo'lib, uni rozetkalarni ulash uchun oqim rozetkalari uchun ishlatiladigan selektor yordamida multiplekslash mumkin. Rozetka kanalini uning statik open usulini chaqirish orqali yaratish mumkin, agar oldindan mavjud bo‘lgan rozetka bo‘lsa allaqachon yaratilmagan. present.Socket kanali ochiq usulni chaqirish orqali yaratiladi, lekin u hali ulanmagan. Rozetkaga ulanish uchun kanal connect usulini chaqirishi kerak. 
Bu yerda kanal ulanmaganligini va kiritish-chiqarish operatsiyasiga urinilayotganini ta'kidlash lozim.
Ushbu kanal tomonidan NotYetConnectedException yuboriladi. Shuning uchun har qanday kiritish/chiqarish operatsiyasini bajarishdan oldin kanalning ulanganligiga ishonch hosil qilishingiz kerak. Kanal ulangandan keyin u yopilguncha ulangan bo‘lib qoladi. Soket kanalining holatini uning isConnected usulini chaqirish orqali aniqlash mumkin .
Soket kanaliga ulanish uning finishConnect usulini chaqirish orqali yakunlanishi mumkin. IsConnectionPending usulini chaqirish orqali ulanish jarayoni davom etyaptimi yoki yo‘qligini aniqlash mumkinmi? Birlamchi rozetka kanali bloklanmaydigan ulanishni qo‘llab-quvvatlaydi. Shuningdek, u asinxron oʻchirishni ham qoʻllab-quvvatlaydi, bu Kanal sinfida koʻrsatilgan asinxron yopish operatsiyasiga oʻxshaydi.
Rozetka quvurlari bir vaqtning o'zida bir nechta iplar tomonidan foydalanish uchun xavfsizdir. Ular bir vaqtning o‘zida o‘qish va yozishni qo‘llab-quvvatlaydi, lekin bir vaqtning o‘zida bittadan ortiq ip o‘qiy olmasa va bittadan ortiq ip yozish mumkin emas. Ulanish va tugatishConnect usullari bir-biri bilan sinxronlashtiriladi va ushbu usullardan biri bajarilayotganda oʻqish yoki yozish jarayonini boshlashga urinish qoʻngʻiroq tugaguncha bloklanadi.
Kanal soketining muhim usullari
(SocketAddress local) − Bu usul soket kanalini mahalliy manzilga ulash uchun ishlatiladi, bu usul parametri sifatida taqdim etiladi.Ulanish(SocketAddress masofaviy) – Bu usul rozetkani masofaviy manzilga ulash uchun ishlatiladi.FinishConnect - Bu usul soket kanaliga ulanish jarayonini tugatishuchun ishlatiladi.getRemoteAddress – Bu usul kanal rozetkasi ulangan masofaviy manzil manzilini qaytaradi.IsConnected – Yuqorida aytib o‘tilganidek, bu usul rozetka kanalining ulanish holatini, ya’ni u ulangan yoki ulanmaganligini qaytaradi.Open va open((SocketAddress remote) - Ochish usuli ko'rsatilgan manzilsiz rozetka kanalini ochish uchun ishlatiladi, parametrlangan ochiq usul esa kanalni ochadi. masofaviy manzilni ko‘rsatadi va unga ham ulanadi.Ushbu qulaylik usuli qabul qilingan rozetka kanalida ulanish usulini chaqirish, uni masofadan uzatish va keyin o‘sha kanalni qaytarish orqali open deb ataladi.Read(ByteBuffer dst) - Bu usul ma'lum buferdan rozetka trubkasi orqali ma'lumotlarni o'qish uchun ishlatiladi.IsConnectionPending – Bu usul ushbu kanalda ulanish jarayoni davom etayotganligi haqida xabar beradi.Bind(SocketAddress local) − Bu usul soket kanalini mahalliy manzilga ulash uchun ishlatiladi, bu usul parametri sifatida taqdim etiladi.Ulanish(SocketAddress masofaviy) – Bu usul rozetkani masofaviy manzilga ulash uchun ishlatiladi.FinishConnect- Bu usul soket kanaliga ulanish jarayonini tugatish uchun ishlatiladi.GetRemoteAddress – Bu usul kanal rozetkasi ulangan masofaviy manzil manzilini qaytaradi.FsConnected – Yuqorida aytib o‘tilganidek, bu usul rozetka kanalining ulanish holatini, ya’ni u ulangan yoki ulanmaganligini qaytaradi.Open va open((SocketAddress remote) - Ochish usuli ko'rsatilgan manzilsiz rozetka kanalini ochish uchun ishlatiladi, parametrlangan ochiq usul esa kanalni ochadi. masofaviy manzilni ko‘rsatadi va unga ham ulanadi.Ushbu qulaylik usuli qabul qilingan rozetka kanalida ulanish usulini chaqirish, uni masofadan uzatish va keyin o‘sha kanalni qaytarish orqali open deb ataladi.Read(ByteBuffer dst) - Bu usul ma'lum buferdan rozetka trubkasi orqali ma'lumotlarni o'qish uchun ishlatiladi.IsConnectionPending– Bu usul ushbu kanalda ulanish jarayoni davom etayotganligi haqida xabar beradi.
Quyidagi misol Java NIO SocketChannel-dan ma'lumotlarni qanday yuborishni ko'rsatadi.
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.EnumSet;

public class SocketChannelClient {


public static void main(String[] args) throws IOException {
ServerSocketChannel serverSocket = null;
SocketChannel client = null;
serverSocket = ServerSocketChannel.open();
serverSocket.socket().bind(new InetSocketAddress(9000));
client = serverSocket.accept();
System.out.println("Connection Set: " + client.getRemoteAddress());
Path path = Paths.get("C:/Test/temp1.txt");
FileChannel fileChannel = FileChannel.open(path,
EnumSet.of(StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.WRITE)
);
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(client.read(buffer) > 0) {
buffer.flip();
fileChannel.write(buffer);
buffer.clear();
}
fileChannel.close();
System.out.println("File Received");
client.close();
}
Mijozni ishga tushirish server ishga tushmaguncha hech narsa chop etmaydi.

Download 137.97 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling