Java -da bir Şəbəkə Tətbiqi necə yaradılır (Şəkillərlə birlikdə)

Mündəricat:

Java -da bir Şəbəkə Tətbiqi necə yaradılır (Şəkillərlə birlikdə)
Java -da bir Şəbəkə Tətbiqi necə yaradılır (Şəkillərlə birlikdə)

Video: Java -da bir Şəbəkə Tətbiqi necə yaradılır (Şəkillərlə birlikdə)

Video: Java -da bir Şəbəkə Tətbiqi necə yaradılır (Şəkillərlə birlikdə)
Video: Yeni iPhone-ların qutusunda adapter olmayacaq amma qiyməti qalxacaq? | Tech-News #86 2024, Bilər
Anonim

Müəyyən bir cihazda işləyən kod yazmaq çox məmnun edir. Ancaq bir-biri ilə ünsiyyət quran bir neçə cihazda işləyən kod yazmaq sadəcə həyatı təsdiq edir. Bu məqalə, ötürmə idarəetmə protokolu (TCP) istifadə edərək şəbəkə üzərindən necə əlaqə qurmağı və mesaj mübadiləsini öyrədəcək.

Bu yazıda, kompüterinizi özünə bağlayacaq və əslində dəli edəcək bir proqram quracaqsınız - özü ilə danışın. Java -da şəbəkə qurmaq üçün ən çox istifadə olunan iki axın arasındakı fərqi və necə işlədiyini də öyrənəcəksiniz.

Məlumat və obyekt axınları

Koda girməzdən əvvəl məqalədə istifadə olunan iki axın arasındakı fərqi ayırd etmək lazımdır.

Məlumat axınları

Məlumat axınları ibtidai məlumat növlərini və sətirlərini emal edir. Məlumat axınları üzərində göndərilən məlumatların əllə seriallaşdırılması və seriyalaşdırılması lazımdır ki, bu da mürəkkəb məlumatların ötürülməsini çətinləşdirir. Ancaq məlumat axınları Java -dan başqa dillərdə yazılmış server və müştərilərlə ünsiyyət qura bilər. Xam axınlar bu baxımdan məlumat axınlarına bənzəyir, lakin məlumat axınları məlumatların platformadan asılı olmayan bir şəkildə formatlanmasını təmin edir ki, bu da hər iki tərəfin göndərilən məlumatları oxuya biləcəyi üçün faydalıdır.

Obyekt axınları

Obyekt axınları ibtidai məlumat növlərini və həyata keçirən obyektləri emal edir

Seriallaşdırıla bilər

interfeys. Obyekt axınları üzərindən göndərilən məlumatlar avtomatik olaraq seriallaşdırılır və seriyalaşdırılır ki, bu da kompleks məlumatların ötürülməsini asanlaşdırır. Ancaq obyekt axınları yalnız Java dilində yazılmış serverlər və müştərilərlə ünsiyyət qura bilər. Həmçinin,

ObjectOutputStream

işə salındıqdan sonra, -ə bir başlıq göndərir

InputStream

başlıq alındıqdan sonra başlıq alınana qədər icranı bloklayan digər tərəfin.

Addımlar

Java Step1 -də Şəbəkə Tətbiqi yaradın
Java Step1 -də Şəbəkə Tətbiqi yaradın

Addım 1. Bir sinif yaradın

Bir sinif yaradın və istədiyiniz kimi adlandırın. Bu yazıda buna ad veriləcək

NetworkAppExample

ictimai sinif NetworkAppExample {}

Java Step2 -də Şəbəkə Tətbiqi yaradın
Java Step2 -də Şəbəkə Tətbiqi yaradın

Addım 2. Əsas bir üsul yaradın

Əsas bir metod yaradın və istisnalar yarada biləcəyini bəyan edin

İstisna

növü və hər hansı bir alt sinfi - bütün istisnalar. Bu pis bir tətbiq sayılır, ancaq yalın sümük nümunələri üçün məqbuldur.

ictimai sinif NetworkAppExample {public static void main (String args) istisnalar atır {}}

Java Step3 -də Şəbəkə Tətbiqi yaradın
Java Step3 -də Şəbəkə Tətbiqi yaradın

Addım 3. Server ünvanını bəyan edin

Bu nümunədə yerli host ünvanı və ixtiyari bir port nömrəsi istifadə ediləcək. Liman nömrəsi 0 ilə 65535 (daxil olmaqla) aralığında olmalıdır. Bununla birlikdə, qorunan sistem nömrələri olduğu üçün 0 -dan 1023 -ə qədər (daxil olmaqla) qarşısını almaq üçün liman nömrələri.

ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; }}

Java Step4 -də Şəbəkə Tətbiqi yaradın
Java Step4 -də Şəbəkə Tətbiqi yaradın

Addım 4. Bir server yaradın

Server ünvana və limana bağlıdır və gələn bağlantıları dinləyir. Java -da,

ServerSocket

server tərəfi son nöqtəni təmsil edir və funksiyası yeni əlaqələri qəbul etməkdir.

ServerSocket

məlumatların oxunması və göndərilməsi üçün axın yoxdur, çünki server və müştəri arasındakı əlaqəni əks etdirmir.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); }}

Java Step5 -də Şəbəkə Tətbiqi yaradın
Java Step5 -də Şəbəkə Tətbiqi yaradın

Addım 5. Giriş serverinin işə salınması

Giriş məqsədləri üçün serverin başladığını konsola yazdırın.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); }}

Java Step6 -də Şəbəkə Tətbiqi yaradın
Java Step6 -də Şəbəkə Tətbiqi yaradın

Addım 6. Müştəri yaradın

Müştəri bir serverin ünvanına və limanına bağlıdır və əlaqə qurulduqdan sonra paketləri (mesajları) dinləyir. Java -da,

Soket

ya serverə bağlı bir müştəri tərəfi son nöqtəsini və ya müştəri ilə əlaqəni (serverdən) təmsil edir və digər tərəfdən tərəflə ünsiyyət qurmaq üçün istifadə olunur.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); }}

Java Step7 -də Şəbəkə Tətbiqi yaradın
Java Step7 -də Şəbəkə Tətbiqi yaradın

Addım 7. Giriş bağlantısı cəhd edin

Giriş məqsədləri üçün əlaqəyə cəhd edildiyini konsola yazdırın.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); }}

Java Step8 -də Şəbəkə Tətbiqi yaradın
Java Step8 -də Şəbəkə Tətbiqi yaradın

Addım 8. Əlaqə qurun

Müştəri heç vaxt əlaqə qurmayacaq, əgər server dinləməsə və qəbul etməsə, başqa sözlə əlaqələr qurmasa. Java -da əlaqə qurulur

qəbul et ()

üsulu

ServerSocket

sinif Bir müştəri əlaqə qurana qədər bu üsul icranı maneə törədir.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); }}

Java Step9 -də Şəbəkə Tətbiqi yaradın
Java Step9 -də Şəbəkə Tətbiqi yaradın

Addım 9. Qurulmuş əlaqəni qeyd edin

Giriş məqsədləri üçün serverlə müştəri arasında əlaqənin qurulduğunu konsola yazdırın.

java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); }}

Java Step10 -də Şəbəkə Tətbiqi yaradın
Java Step10 -də Şəbəkə Tətbiqi yaradın

Addım 10. Ünsiyyət axınlarını hazırlayın

Rabitə axınlar üzərində aparılır və bu tətbiqdə serverdən (müştəriyə) və müştəridən xam axınlar ya məlumatlara, ya da obyekt axınlarına bağlanmalıdır. Unutmayın ki, hər iki tərəf eyni axın növündən istifadə etməlidir.

  • Məlumat axınları

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); }}

  • Obyekt axınları

    Birdən çox obyekt axını istifadə edildikdə, giriş axınları çıxış axınları ilə eyni qaydada işə salınmalıdır

    ObjectOutputStream

    qarşı tərəfə başlıq göndərir və

    ObjectInputStream

    başlığı oxuyana qədər icranı bloklayır.

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); }}

    Yuxarıdakı kodda göstərildiyi kimi sifarişi xatırlamaq daha asan ola bilər - əvvəlcə çıxış axınlarını sonra eyni qaydada daxil edin. Bununla birlikdə, obyekt axınlarının işə salınması üçün başqa bir sifariş aşağıdakılardır:

    ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ());

Java Step11 -də Şəbəkə Tətbiqi yaradın
Java Step11 -də Şəbəkə Tətbiqi yaradın

Addım 11. Ünsiyyətin hazır olduğunu qeyd edin

Giriş məqsədləri üçün ünsiyyətin hazır olduğunu konsola yazdırın.

// koda java.net. InetAddress daxil edilmədi; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); // kod buraxıldı System.out.println ("Əlaqə hazırdır."); }}

Java Step12 -də Şəbəkə Tətbiqi yaradın
Java Step12 -də Şəbəkə Tətbiqi yaradın

Addım 12. Mesaj yaradın

Bu tətbiqdə,

Salam Dünya

mətn serverə ya kimi göndəriləcək

bayt

və ya

Simli

. İstifadə olunan axından asılı olan bir növ dəyişən elan edin. İstifadə edin

bayt

məlumat axınları üçün və

Simli

obyekt axınları üçün.

  • Məlumat axınları

    Məlumat axınlarından istifadə edərək, seriallaşdırma obyektləri ibtidai məlumat növlərinə çevirməklə və ya a

    Simli

    . Bu halda,

    Simli

    -ə çevrilir

    bayt

    istifadə etməklə yazmaq əvəzinə

    writeBytes ()

    şəkillər və ya digər sənədlər kimi digər obyektlərlə necə ediləcəyini göstərmək üçün bir üsul.

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); bayt messageOut = "Salam Dünya".getBytes (); }}

  • Obyekt axınları

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); String messageOut = "Salam Dünya"; }}

Java Step13 -də Şəbəkə Tətbiqi yaradın
Java Step13 -də Şəbəkə Tətbiqi yaradın

Addım 13. Mesaj göndərin

Çıxış axınına məlumat yazın və məlumatların tamamilə yazıldığından əmin olmaq üçün axını yuyun.

  • Məlumat axınları

    Bir mesajın uzunluğunu əvvəlcə göndərmək lazımdır ki, qarşı tərəf neçə bayt oxumalı olduğunu bilsin. Uzunluq ibtidai tam ədəd olaraq göndərildikdən sonra baytlar göndərilə bilər.

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); bayt messageOut = "Salam Dünya".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); }}

  • Obyekt axınları

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); String messageOut = "Salam Dünya"; clientOut.writeObject (messageOut); clientOut.flush (); }}

Java Step14 -də Şəbəkə Tətbiqi yaradın
Java Step14 -də Şəbəkə Tətbiqi yaradın

Addım 14. Mesaj göndər

Giriş üçün mesajın göndərildiyini konsola yazın.

  • Məlumat axınları

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); bayt messageOut = "Salam Dünya".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + yeni String (messageOut)); }}

  • Obyekt axınları

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); String messageOut = "Salam Dünya"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + messageOut); }}

Java Step15 -də Şəbəkə Tətbiqi yaradın
Java Step15 -də Şəbəkə Tətbiqi yaradın

Addım 15. Mesajı oxuyun

Giriş axınındakı məlumatları oxuyun və çevirin. Göndərilən məlumatların növünü dəqiq bildiyimiz üçün ya bir

Simli

dan

bayt

və ya tökmə

Obyekt

Simli

yoxlanılmadan, istifadə olunan axından asılı olaraq.

  • Məlumat axınları

    Əvvəlcə uzunluq və sonra bayt göndərildiyindən oxunuş eyni qaydada aparılmalıdır. Uzunluq sıfır olarsa, oxumaq üçün heç bir şey yoxdur. Baytlar yenidən nümunəyə çevrildikdə, bu halda of

    Simli

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); bayt messageOut = "Salam Dünya".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + yeni String (messageOut)); int uzunluğu = serverIn.readInt (); if (uzunluq> 0) {bayt messageIn = yeni bayt [uzunluq]; serverIn.readFully (messageIn, 0, messageIn.length); }}}

  • Obyekt axınları

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); String messageOut = "Salam Dünya"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + messageOut); String messageIn = (String) serverIn.readObject (); }}

Java Step16 -də Şəbəkə Tətbiqi yaradın
Java Step16 -də Şəbəkə Tətbiqi yaradın

Addım 16. Giriş mesajı oxuyun

Giriş məqsədləri üçün mesajın alındığını konsola yazın və məzmununu çap edin.

  • Məlumat axınları

    java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); DataOutputStream clientOut = yeni DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = yeni DataInputStream (client.getInputStream ()); DataOutputStream serverOut = yeni DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = yeni DataInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); bayt messageOut = "Salam Dünya".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + yeni String (messageOut)); int uzunluğu = serverIn.readInt (); if (uzunluq> 0) {bayt messageIn = yeni bayt [uzunluq]; serverIn.readFully (messageIn, 0, messageIn.length); System.out.println ("Müştəridən alınan mesaj:" + yeni String (messageIn)); }}}

  • Obyekt axınları

    java.io. ObjectInputStream idxal edin; java.io. ObjectOutputStream idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); ObjectOutputStream clientOut = yeni ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = yeni ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = yeni ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = yeni ObjectInputStream (connection.getInputStream ()); System.out.println ("Ünsiyyət hazırdır."); String messageOut = "Salam Dünya"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Mesaj serverə göndərildi:" + messageOut); String messageIn = (String) serverIn.readObject (); System.out.println ("Müştəridən alınan mesaj:" + messageIn); }}

Java Step17 -də Şəbəkə Tətbiqi yaradın
Java Step17 -də Şəbəkə Tətbiqi yaradın

Addım 17. Əlaqələri ayırın

Bir tərəf öz axınlarını bağladıqda əlaqə kəsilir. Java -da, çıxış axını bağlanaraq əlaqəli yuva və giriş axını da bağlanır. Digər tərəfdən bir tərəf əlaqənin öldüyünü öyrəndikdə, yaddaş sızmalarının qarşısını almaq üçün çıxış axını da bağlamalıdır.

// koda java.net. InetAddress daxil edilmədi; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); // kod buraxıldı System.out.println ("Əlaqə hazırdır."); // kod buraxıldı clientOut.close (); serverOut.close (); }}

Java Step18 V2 -də Şəbəkə Tətbiqi yaradın
Java Step18 V2 -də Şəbəkə Tətbiqi yaradın

Addım 18. Girişin kəsilməsi

Giriş məqsədləri üçün konsolun çap əlaqələri kəsildi.

// koda java.net. InetAddress daxil edilmədi; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); // kod buraxıldı System.out.println ("Əlaqə hazırdır."); // kod buraxıldı clientOut.close (); serverOut.close (); System.out.println ("Bağlantılar bağlandı."); }}

Java Step19 -də Şəbəkə Tətbiqi yaradın
Java Step19 -də Şəbəkə Tətbiqi yaradın

Addım 19. Serveri ləğv edin

Əlaqələr kəsildi, ancaq server hələ də işləyir. Kimi

ServerSocket

heç bir axınla əlaqəli deyil, zəng edərək açıq şəkildə bağlanmalıdır

yaxın()

üsul

// koda java.net. InetAddress daxil edilmədi; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); // kod buraxıldı System.out.println ("Əlaqə hazırdır."); // kod buraxıldı clientOut.close (); serverOut.close (); System.out.println ("Bağlantılar bağlandı."); server.close (); }}

Java Step20 -də Şəbəkə Tətbiqi yaradın
Java Step20 -də Şəbəkə Tətbiqi yaradın

Addım 20. Giriş serverinin ləğvi

Giriş məqsədləri üçün konsol serverinə çap dayandırıldı.

// koda java.net. InetAddress daxil edilmədi; java.net. ServerSocket idxal edin; java.net. Socket idxal edin; ictimai sinif NetworkAppExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; ServerSocket server = yeni ServerSocket (port, 50, InetAddress.getByName (host)); System.out.println ("Server başladı."); Socket müştəri = yeni Soket (host, port); System.out.println ("Serverə qoşulur …"); Soket bağlantısı = server.accept (); System.out.println ("Bağlantı quruldu."); // kod buraxıldı System.out.println ("Əlaqə hazırdır."); // kod buraxıldı clientOut.close (); serverOut.close (); System.out.println ("Bağlantılar bağlandı."); server.close (); System.out.println ("Server sona çatdı."); }}

Java Step21 -də Şəbəkə Tətbiqi yaradın
Java Step21 -də Şəbəkə Tətbiqi yaradın

Addım 21. Kompilyasiya edin və işləyin

Giriş, tətbiqin uğurlu olub olmadığını öyrənməyə imkan verdi. Gözlənilən çıxış:

Server başladı. Serverə qoşulur… Bağlantı quruldu. Ünsiyyət hazırdır. Serverə göndərilən mesaj: Hello World Müştəridən alınan mesaj: Hello World Connections bağlandı. Server ləğv edildi.

Çıxışınız baş verməsi ehtimalı olmayan yuxarıdakı kimi deyilsə, bir neçə həll yolu var:

  • Çıxış xətdə dayanırsa

    Bağlantı quruldu.

    və obyekt axınları istifadə olunur, hər birini yuyun

    ObjectOutputStream

  • başlıqlar nədənsə göndərilmədiyi üçün başlanğıcdan dərhal sonra.
  • Çıxış çap olunursa

    java.net. BindException: Artıq istifadə olunan ünvan

  • fərqli bir port nömrəsi seçin, çünki göstərilən biri artıq istifadə olunur.

İpuçları

  • Fərqli bir şəbəkədəki bir serverə qoşulmaq, yönləndirilmiş portu olan serveri işlədən bir cihazın xarici IP ünvanına qoşulmaqla həyata keçirilir.
  • Eyni şəbəkədəki bir serverə qoşulma ya serverlə işləyən bir cihazın xüsusi IP ünvanına qoşulmaq, ya da bir portu yönləndirmək və cihazın xarici IP ünvanına qoşulmaqla həyata keçirilir.
  • Hamachi kimi başqa bir şəbəkədə serverə liman göndərmədən qoşulmağa imkan verən proqramlar var, lakin hər iki cihazda proqramın quraşdırılmasını tələb edir.

Nümunələr

Bloklama giriş/çıxışı istifadə edən şəbəkə tətbiqləri mövzuları istifadə etməlidir. Aşağıdakı nümunələr mövzu ilə minimalist bir server və müştəri tətbiqini göstərir. Şəbəkə kodu, bəzi parçaların sinxronlaşdırılması, mövzuya köçürülməsi və istisnaların işlənməsi istisna olmaqla, məqalədəki kimidir.

Server.java

java.io. IOException idxal edin; java.net. InetAddress idxal edin; java.net. ServerSocket idxal edin; java.net. SocketException idxal edin; java.net. UnknownHostException idxal edin; java.util. ArrayList idxal edin; java.util. Collections idxal edin; java.util. List idxal edin; /*** {@code Server} sinfi bir şəbəkədəki bir server son nöqtəsini təmsil edir. {@code Server} bir dəfə müəyyən bir IP * ünvanına və limanına bağlıdır, müştərilərlə əlaqə qurur və onlarla ünsiyyət qura və ya əlaqəsini kəsə bilir. *

* Bu sinif təhlükəsizdir. * * @version 1.0 * @Müştəri baxın * @Bağlantıya baxın */ ictimai sinif Server Runnable {private ServerSocket serverini həyata keçirir; Şəxsi Siyahı əlaqələr; Şəxsi iplik; xüsusi son Obyekt bağlantılarıLock = new Object (); /** * Daxil olan müştərilərin növbə tələb olunan maksimum uzunluğu ilə müəyyən edilmiş host adı və portdakı müştərilərlə qarşılıqlı əlaqədə olan bir {@code Server} qurur. * * @param host İstifadə etmək üçün Host ünvanı. * @param portu İstifadə etmək üçün Port nömrəsi. * @param backlog Daxil olan müştərilərin növbəsinin maksimum uzunluğunu tələb etdi. * @NetworkException atar Bir server işə salınarkən səhv baş verərsə. */ public Server (String host, int port, int backlog) NetworkException atır {try {server = new ServerSocket (port, backlog, InetAddress.getByName (host))); } catch (UnknownHostException e) {yeni NetworkException atın ("Host adı həll edilə bilmədi:" + ana, e); } catch (IllegalArgumentException e) {new NetworkException atın ("Liman nömrəsi 0 ilə 65535 arasında olmalıdır (daxil olmaqla):" + port); } catch (IOException e) {new NetworkException atın ("Server işə salınmadı.", e); } əlaqələr = Collections.synchronizedList (yeni ArrayList ()); mövzu = yeni mövzu (bu); thread.start (); } /*** Göstərilən host adı və portdakı müştərilərlə qarşılıqlı əlaqədə olan bir@@Kod Server} qurur. * * @param host Bağlamaq üçün host ünvanı. * @param port Bağlamaq üçün port nömrəsi. * @NetworkException atar Bir server işə salınarkən səhvlər baş verərsə. */ public Server (String host, int port) NetworkException atır {this (host, port, 50); } /*** Müştərilərdən gələn əlaqələri dinləyir, qəbul edir və qeyd edir. */ @Orride public void run () {while (! Server.isClosed ()) {try {links.add (new Connection (server.accept ()))); } tutmaq (SocketException e) {if (! e.getMessage (). bərabərdir ("Soket bağlı")) {e.printStackTrace (); }} tutmaq (NetworkException | IOException e) {e.printStackTrace (); }}} /*** Məlumatları bütün qeydiyyatdan keçmiş müştərilərə göndərir. * * @param data Göndəriləcək məlumatlar. * @IllegalStateException atır Əgər server oflayn olduqda məlumat yazmağa cəhd edilir. * @IllegalArgumentException atar Əgər göndəriləcək məlumatlar sıfırdırsa. */ public void yayım (Obyekt məlumatları) {if (server.isClosed ()) {new IllegalStateException ("Məlumat göndərilməyib, server oflayndır."); } if (data == null) {new IllegalArgumentException ("null data") atmaq; } senkronize (ConnectionsLock) {üçün (Bağlantı bağlantısı: bağlantılar) {cəhd edin {connection.send (data); System.out.println ("Məlumatlar müştəriyə uğurla göndərildi."); } tutmaq (NetworkException e) {e.printStackTrace (); }}}} /*** Bağlantı kəsmə mesajı göndərir və göstərilən müştəri əlaqəsini kəsir. * * @param bağlantısı Müştərini ayırmaq. * @NetworkException atar Bağlantı bağlanarkən səhv baş verərsə. */ public void disconnect (Connection connection) atar NetworkException {if (Connections.remove (connection)) {connection.close (); }} /*** Bütün müştərilərə əlaqəni kəsmə mesajı göndərir, əlaqələrini kəsir və serveri dayandırır. */ public void close () NetworkException {synchronized (ConnectionsLock) {for (Connection connection: Connections) {try {connection.close (); } tutmaq (NetworkException e) {e.printStackTrace (); }}} əlaqələr.clear (); cəhd edin {server.close (); } catch (IOException e) {new NetworkException atın ("Server bağlanarkən xəta."); } nəhayət {thread.interrupt (); }} /*** Serverin onlayn olub olmadığını qaytarır. * * Əgər server onlayndırsa @Return True. Yalan, əks halda. */ public boolean isOnline () {return! server.isClosed (); } /*** Bir sıra qeydiyyatdan keçmiş müştəriləri qaytarır. */ public Connection getConnections () {synchronized (ConnectionsLock) {return links.toArray (new Connection [Connections.size ()])); }}}

Müştəri.java

java.io. IOException idxal edin; java.net. Socket idxal edin; java.net. UnknownHostException idxal edin; /*** {@code Client} sinfi bir şəbəkədəki müştəri son nöqtəsini təmsil edir. {@code Client}, müəyyən bir * serverə qoşulduqda, yalnız serverlə əlaqə qura biləcəyinə zəmanət verilir. Digər müştərilərin məlumatı alıp almaması serverin tətbiqindən asılıdır. *

* Bu sinif təhlükəsizdir. * * @version 1.0 * @Serverə baxın * @Bağlantıya baxın */ ictimai sinif Müştəri {özəl Bağlantı bağlantısı; /*** Göstərilən ana və portdakı serverə bağlı bir {@code Client} qurur. * * @param host Bağlamaq üçün host ünvanı. * @param port Bağlamaq üçün port nömrəsi. * @NetworkException atar Bir server işə salınarkən səhv baş verərsə. */ public Client (String host, int port) NetworkException atır {try {connection = new Connection (new Socket (host, port)); } catch (UnknownHostException e) {yeni NetworkException atın ("Host adı həll edilə bilmədi:" + ana, e); } catch (IllegalArgumentException e) {new NetworkException atın ("Liman nömrəsi 0 ilə 65535 arasında olmalıdır (daxil olmaqla):" + port); } catch (IOException e) {new NetworkException atın ("Server işə salınmadı.", e); }} /*** Məlumatı digər tərəfə göndərir. * * @param data Göndəriləcək məlumatlar. * @NetworkException atar Çıxış axınına yazmaq uğursuz olarsa. * @IllegalStateException atar Bağlantı bağlandıqda məlumat yazmağa cəhd edilir. * @IllegalArgumentException atar Əgər göndəriləcək məlumatlar sıfırdırsa. * @UnsupportedOperationException atılır Dəstəklənməyən məlumat növü göndərilməyə çalışılırsa. */ public void send (Object data) NetworkException {connection.send (data) atır; } /*** Serverə ayrılma mesajı göndərir və əlaqəni bağlayır. */ public void close () NetworkException {connection.close () atır; } /*** Müştərinin serverə bağlı olub -olmamasını qaytarır. * * Müştəri bağlıdırsa @Return True. Yalan, əks halda. */ public boolean isOnline () {return connection.isConnected (); } /*** Müştərinin {@link Connection} nümunəsini qaytarır. */ public Connection getConnection () {qaytarılma bağlantısı; }}

Bağlantı.java

java.io. DataInputStream idxal edin; java.io. DataOutputStream idxal edin; java.io. IOException idxal edin; java.net. Socket idxal edin; java.net. SocketException idxal edin; /** * {@Kod Bağlantısı} sinfi ya serverdən müştəriyə olan əlaqəni, ya da bir şəbəkədəki müştəri son nöqtəsini təmsil edir * {@Kod Bağlantısı} bir dəfə bağlandıqdan sonra digər tərəf və ya tərəflərlə məlumat mübadiləsi edə bilir. server * tətbiqində. *

* Bu sinif təhlükəsizdir. * * @version 1.0 * @Serverə baxın * @Müştəri baxın */ ictimai sinif Bağlantısı Runnable {private Socket socket; xüsusi DataOutputStream çıxır; özəl DataInputStream; Şəxsi iplik; xüsusi son Object writeLock = new Object (); xüsusi son Object readLock = new Object (); /*** Müəyyən edilmiş {@link Socket} axınlarından istifadə edərək {@code Connection} qurur. * * @param socket Soketlərdən axınları əldə etmək.*/ public Connection (Socket socket) NetworkException yaradır {if (socket == null) {new IllegalArgumentException ("null socket")); } bu.socket = yuva; {out = new DataOutputStream (socket.getOutputStream ()) cəhd edin; } catch (IOException e) {new NetworkException atın ("Çıxış axınına daxil olmaq mümkün olmadı.", e); } cəhd edin {in = yeni DataInputStream (socket.getInputStream ()); } catch (IOException e) {new NetworkException atın ("Giriş axınına daxil olmaq mümkün olmadı.", e); } mövzu = yeni mövzu (bu); thread.start (); } /*** Qarşı tərəflə əlaqə canlı olarkən mesajları oxuyur. */ @Override public void run () {while (! Socket.isClosed ()) {try {int identifier; bayt bayt; senkronize (readLock) {identifier = in.readInt (); int uzunluğu = in.readInt (); if (uzunluq> 0) {bayt = yeni bayt [uzunluq]; in.readFully (bayt, 0, bayt.length); } başqa {davam et; }} keçid (identifikator) {case Identifier. INTERNAL: String əmri = yeni String (bayt); if (command.equals ("disconnect")) {if (! socket.isClosed ()) {System.out.println ("Bağlantı kəsmə paketi alındı."); cəhd edin {close (); } catch (NetworkException e) {qayıt; } } } fasilə; case Identifier. TEXT: System.out.println ("Mesaj alındı:" + yeni String (bayt)); fasilə; default: System.out.println ("Tanınmayan məlumatlar alındı."); }} tutmaq (SocketException e) {if (! e.getMessage (). bərabərdir ("Socket bağlıdır")) {e.printStackTrace (); }} tutmaq (IOException e) {e.printStackTrace (); }}} /*** Məlumatı digər tərəfə göndərir. * * @param data Göndəriləcək məlumatlar. * @NetworkException atar Çıxış axınına yazmaq uğursuz olarsa. * @IllegalStateException atar Bağlantı bağlandıqda məlumat yazmağa cəhd edilir. * @IllegalArgumentException atar Əgər göndəriləcək məlumatlar sıfırdırsa. * @UnsupportedOperationException atılır Dəstəklənməyən məlumat növü göndərilməyə çalışılırsa. */ public void send (Object data) NetworkException {if (socket.isClosed ()) {throw new IllegalStateException ("Data göndərilməyib, əlaqə bağlanıb") atır; } if (data == null) {new IllegalArgumentException ("null data") atmaq; } int identifikatoru; bayt bayt; if (data instanceof of String) {identifier = Identifier. TEXT; bayt = ((String) məlumatları).getBytes (); } başqa {yeni UnsupportedOperationException atın ("Dəstəklənməyən məlumat növü:" + data.getClass ()); } cəhd edin {synchronized (writeLock) {out.writeInt (identifikator); out.writeInt (bayt.length); out.write (bayt); out.flush (); }} catch (IOException e) {new NetworkException atın ("Məlumat göndərilə bilmədi.", e); }} /*** Qarşı tərəfə ayrılma mesajı göndərir və əlaqəni bağlayır. */ public void close () NetworkException {if (socket.isClosed ()) {new IllegalStateException ("Bağlantı artıq bağlıdır.") atır; } cəhd edin {byte message = "disconnect".getBytes (); senkronize (writeLock) {out.writeInt (Identifier. INTERNAL); out.writeInt (mesajın uzunluğu); yazmaq (mesaj); out.flush (); }} catch (IOException e) {System.out.println ("Bağlantı kəsmə mesajı göndərilə bilmədi."); } cəhd edin {synchronized (writeLock) {out.close (); }} catch (IOException e) {new NetworkException atın ("Bağlantı bağlanarkən səhv.", e); } nəhayət {thread.interrupt (); }} /*** Qarşı tərəflə əlaqənin canlı olub olmadığını qaytarır. * * Bağlantı canlıdırsa, @Return True. Yalan, əks halda. */ public boolean isConnected () {return! socket.isClosed (); }}

Identifier.java

/** * {@cod Identifier} sinfi, şəbəkə üzərindən göndərilən məlumatların seriyalaşdırılması və seriyalaşdırılması üçün {@link Connection} tərəfindən istifadə olunan sabitləri ehtiva edir. * * @version 1.0 * @See Connection * / public final class Identifier { / ** * Daxili mesajlar üçün identifikator. */ public static final int INTERNAL = 1; /*** Mətn mesajları üçün identifikator. */ public static final int TEXT = 2; }

NetworkException.java

/*** {@code NetworkException} sinfi şəbəkə ilə bağlı bir xətanı göstərir. * / ictimai sinif NetworkException İstisnanı genişləndirir { / *** Mesajı olaraq {@code null} olan bir {@code NetworkException} qurur. * / public NetworkException () {} / *** Göstərilən mesajla bir {@code NetworkException} qurur. * * @param mesajı Səhvləri təsvir etmək üçün bir mesaj. */ public NetworkException (String mesajı) {super (mesaj); } /*** Göstərilən mesaj və səbəblə bir {@code NetworkException} qurur. * * @param mesajı Səhvləri təsvir etmək üçün bir mesaj. * @param səbəb Bir səhv səbəbi. */ public NetworkException (String mesajı, Atıla bilən səbəb) {super (mesaj, səbəb); } /*** Göstərilən səbəblə bir {@code NetworkException} qurur. * * @param səbəb Bir səhv səbəbi. */ ictimai NetworkException (Atılan səbəb) {super (səbəb); }}

İstifadə nümunəsi.java

/*** {@code UsageExample} sinfi {@link Server} və {@link Client} istifadəsini göstərir. Bu nümunələr, hər bir seqmentin yerinə yetirilməsini təmin etmək üçün * {@link Thread#sleep (long)} istifadə edir, çünki tez başlama və bağlanma bəzi * seqmentlərin icra edilməməsinə səbəb olur. * * @version 1.0 * @Serverə baxın * @Müştəri baxın */ ictimai sinif UsageExample {public static void main (String args) salır İstisna {String host = "localhost"; int port = 10430; Server serveri = yeni Server (host, port); Müştəri müştəri = yeni Müştəri (host, port); Thread.sleep (100L); client.send ("Salam."); server.broadcast ("Hey, dostum!"); Thread.sleep (100L); server.disconnect (server.getConnections () [0]); müştəri tərəfindəki server.close () ilə əlaqəni kəsmək üçün // və ya client.close (); }}

Tövsiyə: