Jinsi ya kuunda Maombi ya Mtandao katika Java (na Picha)

Orodha ya maudhui:

Jinsi ya kuunda Maombi ya Mtandao katika Java (na Picha)
Jinsi ya kuunda Maombi ya Mtandao katika Java (na Picha)

Video: Jinsi ya kuunda Maombi ya Mtandao katika Java (na Picha)

Video: Jinsi ya kuunda Maombi ya Mtandao katika Java (na Picha)
Video: Kama unatumia Iphone basi Video hii ni muhimu sana kwako. 2024, Mei
Anonim

Kuandika nambari inayofanya kwenye kifaa fulani kunaridhisha sana. Lakini, kuandika nambari inayotekelezwa kwenye vifaa kadhaa ambavyo huwasiliana na kila mmoja ni kudhibitisha tu maisha. Nakala hii itakufundisha jinsi ya kuunganisha na kubadilisha ujumbe kwenye mtandao kwa kutumia itifaki ya kudhibiti maambukizi (TCP).

Katika kifungu hiki, utaweka programu ambayo itaunganisha kompyuta yako yenyewe na, kwa kweli, kuifanya iwe wazimu - ongea yenyewe. Pia utajifunza tofauti kati ya mito miwili inayotumiwa sana kwa mitandao katika Java na jinsi inavyofanya kazi.

Takwimu na Mito ya vitu

Kabla ya kuingia kwenye nambari, tofauti kati ya mito miwili iliyotumiwa katika kifungu inahitaji kutofautishwa.

Mito ya Takwimu

Mito ya data husindika aina na masharti ya data ya zamani. Takwimu zilizotumwa juu ya mito ya data zinahitaji kuwekwa kwa mikono na kutekelezwa kwa maandishi ambayo inafanya kuwa ngumu kuhamisha data ngumu. Lakini, mito ya data inaweza kuwasiliana na seva na wateja walioandikwa kwa lugha zingine kuliko Java. Mito mbichi ni sawa na mito ya data katika hali hiyo, lakini vijito vya data vinahakikisha kuwa data imeundwa kwa njia huru ya jukwaa ambayo ni ya faida kwa sababu pande zote mbili zitaweza kusoma data iliyotumwa.

Mito ya kitu

Mito ya kitu husindika aina za data za zamani na vitu vinavyotekeleza

Inayoweza kusambazwa

kiolesura. Takwimu zilizotumwa juu ya mito ya kitu hutengenezwa kiotomatiki na kutolewa kwa maandishi ambayo inafanya iwe rahisi kuhamisha data ngumu. Lakini, mito ya kitu inaweza tu kuwasiliana na seva na wateja walioandikwa katika Java. Pia,

ObjectOutputStream

unapoanza, hutuma kichwa kwa

InputStream

wa chama kingine ambacho, wakati wa kuanza, kinazuia utekelezaji hadi kichwa kipokee.

Hatua

Unda Maombi ya Mtandao katika Java Step1
Unda Maombi ya Mtandao katika Java Step1

Hatua ya 1. Unda darasa

Unda darasa na uipe jina hata hivyo unataka. Katika nakala hii, itaitwa

Mfano wa Mtandao

Mfano wa MtandaoAppExample {}

Unda Maombi ya Mtandao katika Java Step2
Unda Maombi ya Mtandao katika Java Step2

Hatua ya 2. Unda njia kuu

Unda njia kuu na utangaze inaweza kutupa tofauti za

Isipokuwa

aina na kitengo chochote cha hiyo - isipokuwa zote. Hii inachukuliwa kama mazoea mabaya, lakini inakubalika kwa mifano isiyo wazi.

darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {}}

Unda Maombi ya Mtandao katika Java Step3
Unda Maombi ya Mtandao katika Java Step3

Hatua ya 3. Tangaza anwani ya seva

Mfano huu utatumia anwani ya mwenyeji wa ndani na nambari ya bandari holela. Nambari ya bandari inahitaji kuwa katika anuwai kutoka 0 hadi 65535 (ikijumuisha). Walakini, nambari za bandari kuzuia kutoka 0 hadi 1023 (ikijumuisha) kwa sababu ni bandari za mfumo zilizohifadhiwa.

darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; }}

Unda Maombi ya Mtandao katika Java Step4
Unda Maombi ya Mtandao katika Java Step4

Hatua ya 4. Unda seva

Seva imefungwa kwa anwani na bandari na inasikiliza unganisho linaloingia. Katika Java,

ServerSocket

inawakilisha mwisho wa upande wa seva na kazi yake inakubali unganisho mpya.

ServerSocket

haina mito ya kusoma na kutuma data kwa sababu haiwakilishi unganisho kati ya seva na mteja.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); }}

Unda Maombi ya Mtandao katika Java Step5
Unda Maombi ya Mtandao katika Java Step5

Hatua ya 5. Kuingia kwa seva ya kuingia

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko ambacho seva imeanzishwa.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); }}

Unda Maombi ya Mtandao katika Java Step6
Unda Maombi ya Mtandao katika Java Step6

Hatua ya 6. Unda mteja

Mteja amefungwa kwa anwani na bandari ya seva na anasikiliza pakiti (ujumbe) baada ya unganisho kuanzishwa. Katika Java,

Tundu

inawakilisha sehemu ya mwisho ya upande wa mteja iliyounganishwa na seva au unganisho (kutoka seva) hadi kwa mteja na hutumiwa kuwasiliana na chama kwa upande mwingine.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); }}

Unda Maombi ya Mtandao katika Java Step7
Unda Maombi ya Mtandao katika Java Step7

Hatua ya 7. Jaribio la unganisho la kuingia

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko kwamba unganisho umejaribiwa.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); }}

Unda Maombi ya Mtandao katika Java Step8
Unda Maombi ya Mtandao katika Java Step8

Hatua ya 8. Anzisha unganisho

Wateja hawataungana kamwe isipokuwa seva inasikiliza na kukubali, kwa maneno mengine inaanzisha, unganisho. Katika Java, unganisho huanzishwa kwa kutumia

kubali ()

njia ya

ServerSocket

darasa. Njia hiyo itazuia utekelezaji hadi mteja aunganishwe.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); }}

Unda Maombi ya Mtandao katika Java Step9
Unda Maombi ya Mtandao katika Java Step9

Hatua ya 9. Ingia imeanzisha unganisho

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko kwamba unganisho kati ya seva na mteja imeanzishwa.

kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); }}

Unda Maombi ya Mtandao katika Java Step10
Unda Maombi ya Mtandao katika Java Step10

Hatua ya 10. Andaa mito ya mawasiliano

Mawasiliano hufanywa juu ya mito na, katika programu hii, mito mbichi ya (unganisho kutoka kwa seva) (kwa mteja) na mteja inahitaji kufungwa kwa minyororo ya data au mito ya kitu. Kumbuka, pande zote mbili zinahitaji kutumia aina moja ya mkondo.

  • Mito ya data

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); }}

  • Mito ya kitu

    Wakati mito ya vitu vingi inatumiwa, vijito vya kuingiza lazima vianzishwe kwa mpangilio sawa na mito ya pato kwa sababu

    ObjectOutputStream

    hutuma kichwa kwa chama kingine na

    ObjectInputStream

    huzuia utekelezaji mpaka usome kichwa.

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); }}

    Agizo kama ilivyoainishwa katika nambari hapo juu inaweza kuwa rahisi kukumbuka - kwanza anzisha mito ya pato kisha mito ya kuingiza kwa mpangilio sawa. Walakini, agizo lingine la kuanzisha mito ya kitu ni yafuatayo:

    Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ());

Unda Maombi ya Mtandao katika Java Step11
Unda Maombi ya Mtandao katika Java Step11

Hatua ya 11. Ingia kuwa mawasiliano iko tayari

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko kwamba mawasiliano iko tayari.

// nambari imeacha kuingiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); // nambari imeacha System.out.println ("Mawasiliano iko tayari."); }}

Unda Maombi ya Mtandao katika Java Step12
Unda Maombi ya Mtandao katika Java Step12

Hatua ya 12. Unda ujumbe

Katika programu hii,

Salamu, Dunia

maandishi yatatumwa kwa seva ama kama

baiti

au

Kamba

. Tangaza tofauti ya aina ambayo inategemea mkondo uliotumiwa. Tumia

baiti

kwa mito ya data na

Kamba

kwa mito ya kitu.

  • Mito ya data

    Kutumia mito ya data, serialization inafanywa kwa kubadilisha vitu kuwa aina za data za zamani au a

    Kamba

    . Kwa kesi hii,

    Kamba

    hubadilishwa kuwa

    baiti

    badala ya kuandikwa kwa kutumia

    kuandikaBytes ()

    njia ya kuonyesha jinsi itafanywa na vitu vingine, kama vile picha au faili zingine.

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); byte messageOut = "Hello World".getBytes (); }}

  • Mito ya kitu

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); String messageOut = "Hello World"; }}

Unda Maombi ya Mtandao katika Java Step13
Unda Maombi ya Mtandao katika Java Step13

Hatua ya 13. Tuma ujumbe

Andika data kwenye mkondo wa pato na futa mkondo ili kuhakikisha data imeandikwa kabisa.

  • Mito ya data

    Urefu wa ujumbe unahitaji kutumwa kwanza ili mtu mwingine ajue ni baiti ngapi inahitaji kusoma. Baada ya urefu kutumwa kama aina ya nambari ya zamani, ka zinaweza kutumwa.

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); byte messageOut = "Hello World".getBytes (); mtejaOut.writeInt (messageOut.length); andika mtejaOut (messageOut); mtejaOut.flush (); }}

  • Mito ya kitu

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); String messageOut = "Hello World"; mtejaOut.writeObject (messageOut); mtejaOut.flush (); }}

Unda Maombi ya Mtandao katika Java Step14
Unda Maombi ya Mtandao katika Java Step14

Hatua ya 14. Ingia ilituma ujumbe

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko kwamba ujumbe umetumwa.

  • Mito ya data

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); byte messageOut = "Hello World".getBytes (); mtejaOut.writeInt (messageOut.length); andika mtejaOut (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + mpya String (messageOut)); }}

  • Mito ya kitu

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); String messageOut = "Hello World"; mtejaOut.writeObject (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + messageOut); }}

Unda Maombi ya Mtandao katika Java Step15
Unda Maombi ya Mtandao katika Java Step15

Hatua ya 15. Soma ujumbe

Soma data kutoka mkondo wa kuingiza na ubadilishe. Kwa kuwa tunajua haswa aina ya data iliyotumwa, labda tutatengeneza faili ya

Kamba

kutoka

baiti

au kutupwa

Kitu

kwa

Kamba

bila kuangalia, kulingana na mkondo uliotumiwa.

  • Mito ya data

    Kama urefu ulitumwa kwanza na baiti baadaye, kusoma kunapaswa kufanywa kwa utaratibu huo huo. Ikiwa urefu ni sifuri, hakuna cha kusoma. Kitu kinatengwa wakati ka hubadilishwa kuwa mfano, katika kesi hii, ya

    Kamba

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); byte messageOut = "Hello World".getBytes (); mtejaOut.writeInt (messageOut.length); andika mtejaOut (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + mpya String (messageOut)); urefu wa int = serverIn.readInt (); ikiwa (urefu> 0) {byte messageIn = new byte [urefu]; serverIn.readFully (messageIn, 0, messageIn.length); }}}

  • Mito ya kitu

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); String messageOut = "Hello World"; mtejaOut.writeObject (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + messageOut); Ujumbe wa kambaIn = (Kamba) serverIn.readObject (); }}

Unda Maombi ya Mtandao katika Java Step16
Unda Maombi ya Mtandao katika Java Step16

Hatua ya 16. Ingia soma ujumbe

Kwa madhumuni ya ukataji miti, chapisha kwa kiweko kwamba ujumbe umepokelewa na chapisha yaliyomo.

  • Mito ya data

    kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); DataOutputStream mtejaOut = mpya DataOutputStream (mteja.getOutputStream ()); Mteja wa DataInputStreamIn = mpya DataInputStream (mteja.getInputStream ()); DataOutputStream serverOut = mpya DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream mpya (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); byte messageOut = "Hello World".getBytes (); mtejaOut.writeInt (messageOut.length); andika mtejaOut (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + mpya String (messageOut)); urefu wa int = serverIn.readInt (); ikiwa (urefu> 0) {byte messageIn = new byte [urefu]; serverIn.readFully (messageIn, 0, messageIn.length); System.out.println ("Ujumbe umepokelewa kutoka kwa mteja:" + String mpya (messageIn)); }}}

  • Mito ya kitu

    kuagiza java.io. ObjectInputStream; kuagiza java.io. ObjectOutputStream; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); Mteja wa ObjectOutputStreamOut = new ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = new ObjectOutputStream (connection.getOutputStream ()); Mteja wa ObjectInputStreamIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("Mawasiliano iko tayari."); String messageOut = "Hello World"; mtejaOut.writeObject (messageOut); mtejaOut.flush (); System.out.println ("Ujumbe umetumwa kwa seva:" + messageOut); Ujumbe wa kambaIn = (Kamba) serverIn.readObject (); System.out.println ("Ujumbe umepokelewa kutoka kwa mteja:" + messageIn); }}

Unda Maombi ya Mtandao katika Java Step17
Unda Maombi ya Mtandao katika Java Step17

Hatua ya 17. Tenganisha unganisho

Muunganisho hukatishwa wakati chama kimoja kinafunga mitiririko yake. Katika Java, kwa kufunga mkondo wa pato, tundu linalohusiana na mkondo wa kuingiza hufungwa pia. Mara tu chama kwa upande mwingine kitakapoona unganisho limekufa, inahitaji kufunga mkondo wake wa pato, pia, kuzuia uvujaji wa kumbukumbu.

// nambari imeacha kuingiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); // nambari imeacha System.out.println ("Mawasiliano iko tayari."); // kificho kimeacha mtejaOut.close (); sevaOut.close (); }}

Unda Maombi ya Mtandao katika Java Step18 V2
Unda Maombi ya Mtandao katika Java Step18 V2

Hatua ya 18. Kukatwa kwa kumbukumbu

Kwa madhumuni ya ukataji wa magogo, chapisha kwa unganisho la kiweko imetenganishwa.

// nambari imeacha kuingiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); // nambari imeacha System.out.println ("Mawasiliano iko tayari."); // kificho kimeacha mtejaOut.close (); sevaOut.close (); System.out.println ("Miunganisho imefungwa."); }}

Unda Maombi ya Mtandao katika Java Step19
Unda Maombi ya Mtandao katika Java Step19

Hatua ya 19. Kusitisha seva

Miunganisho imekatika, lakini seva bado inaendelea. Kama

ServerSocket

haihusiani na mkondo wowote, inahitaji kufungwa wazi kwa kupiga simu

funga ()

njia.

// nambari imeacha kuingiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); // nambari imeacha System.out.println ("Mawasiliano iko tayari."); // kificho kimeacha mtejaOut.close (); sevaOut.close (); System.out.println ("Miunganisho imefungwa."); seva. karibu (); }}

Unda Maombi ya Mtandao katika Java Step20
Unda Maombi ya Mtandao katika Java Step20

Hatua ya 20. Ingiza kukomesha seva

Kwa madhumuni ya ukataji miti, kuchapisha kwenye seva ya koni kumesimamishwa.

// nambari imeacha kuingiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. Socket; darasa la umma NetworkAppExample {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; ServerSocket server = ServerSocket mpya (bandari, 50, InetAddress.getByName (mwenyeji)); System.out.println ("Seva imeanza."); Mteja wa tundu = Tundu mpya (mwenyeji, bandari); System.out.println ("Kuunganisha kwa seva…"); Uunganisho wa tundu = seva.bali (); System.out.println ("Uunganisho umeanzishwa."); // nambari imeacha System.out.println ("Mawasiliano iko tayari."); // kificho kimeacha mtejaOut.close (); sevaOut.close (); System.out.println ("Miunganisho imefungwa."); seva. karibu (); System.out.println ("Seva imesimamishwa."); }}

Unda Maombi ya Mtandao katika Java Step21
Unda Maombi ya Mtandao katika Java Step21

Hatua ya 21. Kusanya na kukimbia

Ukataji miti ulituwezesha kujua ikiwa programu ilifanikiwa au la. Pato linalotarajiwa:

Seva imeanza. Inaunganisha kwa seva … Muunganisho umewekwa. Mawasiliano iko tayari. Ujumbe uliotumwa kwa seva: Habari ya Ulimwengu Ujumbe umepokewa kutoka kwa mteja: Hujambo Miunganisho ya Ulimwengu imefungwa. Seva imesimamishwa.

Ikiwa pato lako halifanani na ile hapo juu, ambayo haiwezekani kutokea, kuna suluhisho kadhaa:

  • Ikiwa pato litaacha kwenye laini

    Uunganisho umeanzishwa.

    na mito ya kitu hutumiwa, futa kila moja

    ObjectOutputStream

  • mara tu baada ya kuanza kwa sababu vichwa, kwa sababu fulani, havikutumwa.
  • Ikiwa pato linachapishwa

    java.net. BindException: Anwani tayari inatumika

  • chagua nambari tofauti ya bandari kwa sababu ile iliyoainishwa tayari imetumika.

Vidokezo

  • Kuunganisha kwa seva kwenye mtandao tofauti hufanywa kwa kuunganisha kwenye anwani ya nje ya IP ya kifaa kinachoendesha seva ambayo ina bandari iliyopelekwa.
  • Kuunganisha kwenye seva kwenye mtandao huo hufanywa kwa kuunganisha kwa anwani ya IP ya faragha ya kifaa kinachoendesha seva au kupeleka bandari na kuunganisha kwa anwani ya IP ya nje ya kifaa.
  • Kuna programu, kama Hamachi, ambayo inaruhusu kuungana na seva kwenye mtandao tofauti bila kusambaza bandari, lakini inahitaji usanikishaji wa programu kwenye vifaa vyote viwili.

Mifano

Matumizi ya mtandao ambayo hutumia kuzuia pembejeo / pato yanahitaji kutumia nyuzi. Mifano zifuatazo zinaonyesha seva ndogo na utekelezaji wa mteja na nyuzi. Nambari ya mitandao kimsingi ni sawa na katika kifungu isipokuwa vijisehemu vingine vilisawazishwa, vilihamishwa kwa nyuzi na vizuizi vinashughulikiwa.

Server.java

kuagiza java.io. IOException; kuagiza java.net. InetAddress; kuagiza java.net. ServerSocket; kuagiza java.net. SocketException; kuagiza java.net. UnknownHostException; kuagiza java.util. ArrayList; kuagiza java.util. Collections; kuagiza java.util. List; / ** * Darasa la {@code Server} linawakilisha sehemu ya mwisho ya seva kwenye mtandao. {@code Server} mara moja imefungwa kwa anwani na bandari fulani ya IP, huanzisha unganisho na wateja na ina uwezo wa kuwasiliana nao au kuwatenganisha. *

* Darasa hili ni salama. * * @version 1.0 * @see Mteja * @see Connection * / darasa la umma Inatumia Runnable {seva ya Server Server ya kibinafsi; Orodha ya kibinafsi viunganisho; Thread ya kibinafsi; uhusiano wa mwisho wa kitu cha mwishoLock = new Object (); / ** * Inaunda {@code Server} ambayo inaingiliana na wateja kwenye jina la mwenyeji na bandari iliyoainishwa na urefu maalum * ulioombwa wa foleni ya wateja wanaoingia. * * @param mwenyeji wa anwani ya kutumia. * @param bandari nambari ya kutumia. * @param backlog Iliomba urefu wa juu wa foleni ya wateja wanaoingia. * @throws NetworkException Ikiwa hitilafu inatokea wakati wa kuanza seva. * / Seva ya umma (Mtangazaji wa kamba, bandari ya ndani, nyuma nyuma) hutupa NetworkException {jaribu {server = ServerSocket mpya (bandari, nyuma, InetAddress.getByName (mwenyeji)); } kukamata (UnknownHostException e) {cast new NetworkException ("Jina la mwenyeji halikuweza kutatuliwa:" + mwenyeji, e); } kukamata (IllegalArgumentException e) {cast new NetworkException ("Nambari ya bandari inahitaji kuwa kati ya 0 na 65535 (ikijumuisha):" + bandari); } kukamata (IOException e) {cast new NetworkException ("Seva haikuweza kuanza.", e); } unganisho = Mikusanyiko.synchronizedList (orodha mpya ya Array ()); thread = Thread mpya (hii); anza thread (); } / ** * Inaunda {@code Server} ambayo inaingiliana na wateja kwenye jina la mwenyeji na bandari maalum. * * @param mwenyeji wa anwani ya kufunga. * @param bandari nambari ya kufunga. * @throws NetworkException Ikiwa makosa yanatokea wakati wa kuanza seva. * / Seva ya umma (mwenyeji wa kamba, bandari ya ndani) hutupa NetworkException {hii (mwenyeji, bandari, 50); } / ** * Inasikiliza, inakubali na inasajili miunganisho inayoingia kutoka kwa wateja. * / @Override public void run () {while (! Server.isClosed ()) {try {connections.add (new Connection (server.accept ())); } kukamata (SocketException e) {if (! e.getMessage (). sawa ("Socket imefungwa")) {e.printStackTrace (); }} kukamata (NetworkException | IOException e) {e.printStackTrace (); }}} / ** * Hutuma data kwa wateja wote waliosajiliwa. * * data ya data ya param kutuma. * @throws IllegalStateException Ikiwa data ya kuandika inajaribiwa wakati seva iko nje ya mtandao. * @throws IllegalArgumentException Ikiwa data ya kutuma ni batili. * / matangazo ya batili ya umma (data ya kitu) {if (server.isClosed ()) {throw new IllegalStateException ("Data haijatumwa, seva iko nje ya mtandao."); } ikiwa (data == null) {cast new IllegalArgumentException ("data batili"); } iliyosawazishwa (connectionsLock) {kwa (Connection connection: connections) {jaribu {connection.send (data); System.out.println ("Takwimu zimetumwa kwa mteja kwa mafanikio."); } kukamata (NetworkException e) {e.printStackTrace (); }}}}} / ** * Hutuma ujumbe wa kukatisha na hukata mteja maalum. * * @param uhusiano Mteja kukatwa. * @throws NetworkException Ikiwa hitilafu inatokea wakati wa kufunga unganisho. * / kukatwa kwa batili ya umma (Muunganisho wa unganisho) hutupa Mtandao wa Kutazama {ikiwa (unganisho. ondoa (unganisho)) {unganisho.funga (); }} / ** * Inatuma ujumbe wa kutenganisha kwa wateja wote, huwaondoa na kumaliza seva. * / utupu wa umma karibu () hutupa NetworkException {iliyosawazishwa (connectionsLock) {kwa (Uunganisho wa unganisho: unganisho) {jaribu {connection.close (); } kukamata (NetworkException e) {e.printStackTrace (); }}} viunganisho. wazi (); jaribu {server.close (); } kukamata (IOException e) {cast new NetworkException ("Kosa wakati wa kufunga seva."); } mwishowe {thread.interrupt (); }} / ** * Inarudi ikiwa seva iko mtandaoni au la. * * @rejea Kweli ikiwa seva iko mkondoni. Uongo, vinginevyo. * / boolean ya umma isOnline () {return! server.isClosed (); } / ** * Hurejesha safu ya wateja waliosajiliwa. * / Public Connection getConnections () {synchronized (connectionsLock) {Return connections.toArray (mpya Connection [connections.size ()]); }}}

Mteja.java

kuagiza java.io. IOException; kuagiza java.net. Socket; kuagiza java.net. UnknownHostException; / ** * Darasa la {@code Client} linawakilisha mwisho wa mteja kwenye mtandao. {@code Client}, ikiunganishwa kwenye seva * fulani, inahakikishiwa tu kuweza kuwasiliana na seva. Ikiwa wateja wengine wanapokea au la wanapokea data * inategemea utekelezaji wa seva. *

* Darasa hili ni salama. * * @version 1.0 * @see Server * @see Connection * / mteja wa darasa la umma {unganisho la unganisho la kibinafsi; / ** * Huunda {@code mteja} iliyounganishwa na seva kwenye seva na bandari maalum. * * @param mwenyeji wa anwani ya kufunga. * @param bandari nambari ya kufunga. * @throws NetworkException Ikiwa hitilafu inatokea wakati wa kuanza seva. * / Mteja wa umma (mwenyeji wa kamba, bandari ya ndani) anatupa NetworkException {jaribu {connection = new Connection (new Socket (host, port)); } kukamata (UnknownHostException e) {cast new NetworkException ("Jina la mwenyeji halikuweza kutatuliwa:" + mwenyeji, e); } kukamata (IllegalArgumentException e) {cast new NetworkException ("Nambari ya bandari inahitaji kuwa kati ya 0 na 65535 (ikijumuisha):" + bandari); } kukamata (IOException e) {cast new NetworkException ("Seva haikuweza kuanza.", e); }} / ** * Hutuma data kwa chama kingine. * * data ya data ya param kutuma. * @throws NetworkException Ikiwa kuandika kwa mkondo wa pato kunashindwa. * @throws IllegalStateException Ikiwa data ya kuandika inajaribiwa wakati unganisho umefungwa. * @throws IllegalArgumentException Ikiwa data ya kutuma ni batili. * @throws UnsupportedOperationException Ikiwa aina ya data isiyotumika inajaribu kutumwa. * / utupu wa umma tuma (data ya kitu) inatupa NetworkException {connection.send (data); } / ** * Inatuma ujumbe wa kukata kwenye, na kufunga uhusiano na, seva. * / utupu wa umma karibu () hutupa NetworkException {connection.close (); } / ** * Hurejesha ikiwa mteja ameunganishwa kwenye seva au la. * * @rejea Kweli ikiwa mteja ameunganishwa. Uongo, vinginevyo. * / boolean ya umma isOnline () {return connection.isConnected (); } / ** * Hurejesha mfano wa {@link Connection} wa mteja. * / Connection ya umma GetConnection () {kurudi unganisho; }}

Uunganisho.java

kuagiza java.io. DataInputStream; kuagiza java.io. DataOutputStream; kuagiza java.io. IOException; kuagiza java.net. Socket; kuagiza java.net. SocketException; / ** * Darasa la {@code Connection} linawakilisha muunganisho kutoka kwa seva hadi kwa mteja au sehemu ya mwisho ya mteja kwenye mtandao * {@code Connection}, ikiunganishwa, inaweza kubadilishana data na chama kingine au vyama, kulingana kwenye utekelezaji wa seva. *

* Darasa hili ni salama. * * @version 1.0 * @see Server * @see Client * / public class Connection kutekeleza Runnable {tundu la tundu la kibinafsi; DataOutputStream ya kibinafsi; DataInputStream ya kibinafsi; Thread ya kibinafsi; faragha ya mwisho ya kuandika writeLock = new Object (); kitu cha mwisho cha kibinafsi readLock = new Object (); / ** * Huunda {@code Connection} kutumia mitiririko ya {@link Socket} iliyobainishwa. * * @param soketi ili kuleta mito kutoka.* / Uunganisho wa umma (tundu la tundu) hutupa NetworkException {ikiwa (tundu == null) {tupa mpya IllegalArgumentException ("tundu tupu"); } this.socket = tundu; jaribu {out = DataOutputStream mpya (socket.getOutputStream ()); } kukamata (IOException e) {cast new NetworkException ("Haikuweza kufikia mkondo wa pato.", e); } jaribu {in = DataInputStream mpya (socket.getInputStream ()); } kukamata (IOException e) {cast new NetworkException ("Haikuweza kufikia mkondo wa kuingiza.", e); } thread = Thread mpya (hii); anza thread (); } / ** * Inasoma ujumbe wakati unganisho na mtu mwingine liko hai. * / @Override public void run () {while (! Socket.isClosed ()) {jaribu {int kitambulisho; baiti ka; iliyolandanishwa (somaLock) {kitambulisho = in.readInt (); urefu wa int = in.readInt (); ikiwa (urefu> 0) {byte = new byte [urefu]; in.readFully (ka, 0, ka. urefu); } mwingine {endelea; }} kubadili (kitambulisho) {kesi Kitambulisho. INTERNAL: String command = new String (bytes); ikiwa (command.equals ("disconnect")) {if (! socket.isClosed ()) {System.out.println ("Pakiti ya kukataliwa imepokelewa."); jaribu {karibu (); } kukamata (NetworkException e) {kurudi; }}} kukatika; Kitambulisho cha kesi. TEXT: System.out.println ("Ujumbe umepokelewa:" + Kamba mpya (ka)); kuvunja; chaguo-msingi: System.out.println ("Data isiyotambuliwa imepokelewa."); }} kukamata (SocketException e) {if (! e.getMessage (). sawa ("Socket imefungwa")) {e.printStackTrace (); }} kukamata (IOException e) {e.printStackTrace (); }}} / ** * Hutuma data kwa chama kingine. * * data ya data ya param kutuma. * @throws NetworkException Ikiwa kuandika kwa mkondo wa pato kunashindwa. * @throws IllegalStateException Ikiwa data ya kuandika inajaribiwa wakati unganisho umefungwa. * @throws IllegalArgumentException Ikiwa data ya kutuma ni batili. * @throws UnsupportedOperationException Ikiwa aina ya data isiyotumika inajaribu kutumwa. * / utupu wa umma tuma (data ya kitu) inatupa NetworkException {if (socket.isClosed ()) {throw new IllegalStateException ("Data haijatumwa, unganisho limefungwa."); } ikiwa (data == null) {cast new IllegalArgumentException ("data batili"); kitambulisho cha int; baiti ka; ikiwa (data ya mfano wa Kamba) {kitambulisho = Kitambulisho. TEXT; data = ((Kamba) data).getBytes (); } mwingine {tupa UnsupportedOperationException mpya ("Aina ya data isiyoungwa mkono:" + data.getClass ()); } jaribu {synchronized (writeLock) {out.writeInt (kitambulisho); andikaInt (baiti. urefu); andika (ka); nje.flush (); }} kukamata (IOException e) {cast new NetworkException ("Data haikuweza kutumwa.", e); }} / ** * Hutuma ujumbe wa kukatisha kwa, na kufunga uhusiano na, chama kingine. * / public void close () hutupa NetworkException {if (socket.isClosed ()) {throw new IllegalStateException ("Uunganisho tayari umefungwa."); } jaribu {byte message = "disconnect".getBytes (); iliyosawazishwa (writeLock) {out.writeInt (Kitambulisho. INTERNAL); andikaInt (ujumbe. urefu); andika (ujumbe); nje.flush (); }} kukamata (IOException e) {System.out.println ("Ujumbe wa kutenganisha haukuweza kutumwa."); } jaribu {synchronized (writeLock) {out.close (); }} kukamata (IOException e) {cast new NetworkException ("Hitilafu wakati wa kufunga unganisho.", e); } mwishowe {thread.interrupt (); }} / ** * Hurejesha ikiwa unganisho kwa mtu mwingine liko au la. * * @rejea Kweli ikiwa unganisho liko hai. Uongo, vinginevyo. * / boolean ya umma imeunganishwa () {kurudi! tundu. imefungwa (); }}

Kitambulisho. Java

/ ** * Darasa la {@ Kitambulisho cha msimbo} lina vizuizi vinavyotumiwa na {@link Connection} kwa kuweka serial na kutia alama data * iliyotumwa juu ya mtandao. * * @version 1.0 * @see Connection * / Kitambulisho cha darasa la mwisho la umma {/ ** * Kitambulisho cha ujumbe wa ndani. * / tuli ya umma ya mwisho int INTERNAL = 1; / ** * Kitambulisho cha ujumbe wa maandishi. * / tuli ya umma ya mwisho int TEXT = 2; }

MtandaoException.java

/ ** * Darasa la {@code NetworkException} linaonyesha kosa linalohusiana na mtandao. * / darasa la umma NetworkException inaongeza Msamaha {/ ** * Inaunda {@code NetworkException} na {@code null} kama ujumbe wake. * / publicException () {} / ** * Inaunda {@code NetworkException} na ujumbe uliotajwa. * * @param ujumbe Ujumbe wa kuelezea makosa. * / umma NetworkException (String message) {super (message); } / ** * Huunda {@code NetworkException} na ujumbe na sababu maalum. * * @param ujumbe Ujumbe wa kuelezea makosa. * @param kusababisha Sababu ya makosa. * / publicException ya umma (Ujumbe wa Kamba, sababu inayoweza kutupwa) {super (message, cause); } / ** * Huunda {@code NetworkException} na sababu maalum. * * @param kusababisha Sababu ya makosa. * / public NetworkException (Sababu inayoweza kutupwa) {super (cause); }}

MatumiziMfano. Java

/ ** * Darasa la {@code MatumiziMfano} linaonyesha matumizi ya {@link Server} na {@link Mteja}. Mifano hii hutumia * {@link Thread # sleep (long)} kuhakikisha kila sehemu inatekelezwa kwa sababu kuanza na kufunga haraka kunasababisha sehemu fulani * kutotekelezwa. * * @version 1.0 * @see Server * @see Mteja * / Matumizi ya darasa la ummaMfano {public static void main (String args) hutupa Isipokuwa {String host = "localhost"; bandari ya int = 10430; Seva ya seva = Seva mpya (mwenyeji, bandari); Mteja wa mteja = Mteja mpya (mwenyeji, bandari); Kulala Thread (100L); tuma mteja ("Hello."); utangazaji wa seva ("Hey, fella!"); Kulala Thread (100L); kukatwa kwa seva (seva.getConnections () [0]); // au client.close () kukatwa kutoka kwa seva ya upande wa mteja. }}

Ilipendekeza: