Kev sau cov cai uas ua rau qee yam khoom siv yog txaus siab heev. Tab sis, sau cov cai uas ua rau ntau lub cuab yeej uas sib tham nrog ib leeg tsuas yog ua pov thawj lub neej. Kab lus no yuav qhia koj yuav ua li cas txuas thiab pauv cov lus sib tham hauv network siv kev tswj hwm kev sib kis (TCP).
Hauv kab lus no, koj yuav teeb tsa daim ntawv thov uas yuav txuas koj lub khoos phis tawj rau nws tus kheej thiab, qhov tseem ceeb, ua rau nws vwm - tham nrog nws tus kheej. Koj tseem yuav kawm qhov sib txawv ntawm ob qhov kev siv dav tshaj plaws rau kev sib tham hauv Java thiab lawv ua haujlwm li cas.
Cov Ntaub Ntawv thiab Cov Hom Phiaj
Ua ntej dhia mus rau hauv txoj cai, qhov sib txawv ntawm ob txoj kev siv hauv kab lus yuav tsum muaj qhov sib txawv.
Cov Kwj Dej
Cov ntaub ntawv ntws ua cov ntaub ntawv qub thiab cov hlua. Cov ntaub ntawv xa hla cov ntaub ntawv xav tau yuav tsum tau ua los ntawm tus kheej thiab deserialized uas ua rau nws nyuaj rau hloov cov ntaub ntawv nyuaj. Tab sis, cov ntaub ntawv ntws tuaj yeem sib tham nrog cov servers thiab cov neeg siv khoom sau ua lwm yam lus dua li Java. Cov kwj deg nyoos zoo ib yam li cov ntaub ntawv ntws hauv qhov ntawd, tab sis cov ntaub ntawv ntws kom ntseeg tau tias cov ntaub ntawv tau teeb tsa hauv lub platform txoj kev ywj pheej uas muaj txiaj ntsig vim tias ob tog yuav tuaj yeem nyeem cov ntaub ntawv xa tuaj.
Lub Hom Phiaj
Lub hom phiaj ntws cov txheej txheem cov ntaub ntawv qub thiab cov khoom uas siv
Serializable
interface. Cov ntaub ntawv xa hla cov khoom ntws tau txiav tawm ncaj qha thiab deserialized uas ua rau nws yooj yim dua rau hloov cov ntaub ntawv nyuaj. Tab sis, cov kwj dej tsuas tuaj yeem sib tham nrog cov servers thiab cov neeg siv khoom sau hauv Java. Tsis tas li,
ObjectOutputStream
thaum pib, xa lub taub hau rau
InputStream
ntawm lwm tog neeg uas, thaum pib ua haujlwm, thaiv kev ua haujlwm kom txog thaum lub taub hau tau txais.
Cov kauj ruam
Kauj Ruam 1. Tsim chav kawm
Tsim chav kawm thiab npe nws li cas koj xav tau. Hauv kab lus no, nws yuav muaj npe
NetworkAppExample
pej xeem chav NetworkAppExample {}
Kauj Ruam 2. Tsim txoj hauv kev tseem ceeb
Tsim txoj hauv kev tseem ceeb thiab tshaj tawm tias nws yuav cuam tshuam qhov tshwj xeeb ntawm
Kev zam
hom thiab ib pawg subclass ntawm nws - txhua qhov kev zam. Qhov no suav tias yog kev coj ua tsis zoo, tab sis pom zoo rau cov piv txwv liab qab.
pej xeem chav NetworkAppExample {pej xeem zoo li qub tsis muaj dab tsi tseem ceeb (Txoj hlua args) cuam tshuam kev zam {}}
Kauj Ruam 3. Tshaj tawm qhov chaw nyob server
Qhov piv txwv no yuav siv tus tswv chaw nyob hauv cheeb tsam thiab tus lej chaw nres nkoj uas xav tau. Tus lej chaw nres nkoj yuav tsum yog nyob ntawm thaj tsam 0 txog 65535 (suav nrog). Txawm li cas los xij, cov naj npawb chaw nres nkoj kom zam ntau ntawm 0 txog 1023 (suav nrog) vim tias lawv tau tshwj tseg cov chaw nres nkoj.
pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; }}
Kauj Ruam 4. Tsim server
Neeg rau zaub mov tau khi rau qhov chaw nyob thiab chaw nres nkoj thiab mloog rau kev sib txuas nkag. Hauv Java,
ServerSocket
sawv cev rau ntawm server-side endpoint thiab nws txoj haujlwm yog lees txais kev sib txuas tshiab.
ServerSocket
tsis muaj kwj dej rau nyeem thiab xa cov ntaub ntawv vim tias nws tsis sawv cev rau kev sib txuas ntawm cov server thiab tus neeg siv khoom.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); }}
Kauj Ruam 5. Nkag mus pib server
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console uas server tau pib lawm.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); }}
Kauj Ruam 6. Tsim tus neeg siv khoom
Tus neeg siv khoom tau khi rau qhov chaw nyob thiab chaw nres nkoj ntawm tus neeg rau zaub mov thiab mloog pob ntawv (cov lus) tom qab tsim kev sib txuas. Hauv Java,
Qhov (socket)
nruab nrab yog ib tus neeg siv khoom-sab kawg txuas nrog lub server lossis txuas (los ntawm server) rau cov neeg siv khoom thiab siv los sib txuas lus nrog tog neeg ntawm lwm qhov kawg.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); }}
Kauj Ruam 7. Nkag mus txuas qhov txuas
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console uas tau txuas nrog lawm.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {Txoj hlua tuav = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); }}
Kauj Ruam 8. Tsim kom muaj kev sib txuas
Cov neeg siv khoom yuav tsis txuas tshwj tsis yog server mloog thiab lees txais, hauv lwm lo lus tsim, sib txuas. Hauv Java, kev sib txuas tau tsim los siv
txais ()
txoj kev ntawm
ServerSocket
chav kawm Txoj kev yuav thaiv kev ua tiav kom txog thaum tus neeg siv khoom sib txuas.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); }}
Kauj Ruam 9. Nkag tsim kev sib txuas
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console uas kev sib txuas ntawm server thiab tus thov kev pab tau tsim.
ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {Txoj hlua tuav = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); }}
Kauj Ruam 10. Npaj kev sib txuas lus
Kev sib txuas lus tau ua tiav hla cov kwj deg thiab, hauv daim ntawv thov no, cov kwj ntws ntawm (kev sib txuas los ntawm) server (rau cov neeg siv khoom) thiab cov neeg siv khoom yuav tsum tau txuas rau cov ntaub ntawv lossis cov khoom ntws. Nco ntsoov, ob tog yuav tsum tau siv tib hom dej.
-
Cov ntaub ntawv ntws
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); }}
-
Lub hom phiaj ntws
Thaum siv ntau cov kwj dej tau siv, cov kwj tawm yuav tsum tau pib ua qhov qub raws li cov kwj tawm vim tias
ObjectOutputStream
xa ib lub taub hau rau lwm tog neeg thiab
ObjectInputStream
thaiv kev ua kom txog thaum nws nyeem lub taub hau.
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); }}
Kev txiav txim raws li tau teev tseg hauv cov cai saum toj no yuav yooj yim dua kom nco qab - thawj zaug pib tso cov kwj tawm tom qab ntawd tso cov kwj dej hauv tib qho kev txiav txim. Txawm li cas los xij, lwm qhov kev txiav txim rau kev pib ua cov khoom ntws yog cov hauv qab no:
ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ());
Kauj Ruam 11. Nkag mus tias kev sib txuas lus tau npaj tiav
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console tias kev sib txuas lus tau npaj tiav.
// chaws rho tawm ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); // txoj cai rho tawm System.out.println ("Kev sib txuas lus tau npaj tiav."); }}
Kauj Ruam 12. Tsim cov lus
Hauv daim ntawv thov no,
Nyob Zoo Ntiaj Teb
ntawv yuav raug xa mus rau tus neeg rau zaub mov ib yam nkaus
peb
los yog
Txoj hlua
. Tshaj tawm qhov sib txawv ntawm hom uas nyob ntawm kwj siv. Siv
peb
rau cov ntaub ntawv ntws thiab
Txoj hlua
rau cov khoom ntws.
-
Cov ntaub ntawv ntws
Siv cov ntaub ntawv ntws, kev ua tiav yog ua los ntawm kev hloov cov khoom mus rau cov ntaub ntawv qub lossis hom
Txoj hlua
. Hauv qhov no,
Txoj hlua
hloov dua siab tshiab rau
peb
es tsis txhob sau siv
writeBytes ()
txoj hauv kev los qhia yuav ua li cas nws yuav ua tiav nrog lwm yam khoom, xws li cov duab lossis lwm yam ntaub ntawv.
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); byte messageOut = "Nyob Zoo Ntiaj Teb".getBytes (); }}
-
Lub hom phiaj ntws
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); String messageOut = "Nyob Zoo Ntiaj Teb"; }}
Kauj Ruam 13. Xa xov
Sau cov ntaub ntawv mus rau cov kwj tawm thiab yaug cov kwj kom ntseeg tau tias cov ntaub ntawv tau raug sau tag nrho.
-
Cov ntaub ntawv ntws
Qhov ntev ntawm cov lus xav tau yuav tsum tau xa ua ntej kom lwm tus neeg paub pes tsawg bytes nws yuav tsum tau nyeem. Tom qab qhov ntev raug xa mus raws li hom tseem ceeb ua ntej, bytes tuaj yeem xa mus.
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); byte messageOut = "Nyob Zoo Ntiaj Teb".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); }}
-
Lub hom phiaj ntws
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); String messageOut = "Nyob Zoo Ntiaj Teb"; clientOut.writeObject (messageOut); clientOut.flush (); }}
Kauj Ruam 14. Log xa lus
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console uas tau xa cov lus.
-
Cov ntaub ntawv ntws
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); byte messageOut = "Nyob Zoo Ntiaj Teb".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + Cov hlua tshiab (messageOut)); }}
-
Lub hom phiaj ntws
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); String messageOut = "Nyob Zoo Ntiaj Teb"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + messageOut); }}
Kauj Ruam 15. Nyeem cov lus
Nyeem cov ntaub ntawv los ntawm cov kwj tawm thiab hloov nws. Txij li thaum peb paub tseeb tias hom kev xa cov ntaub ntawv, peb yuav yog ib qho tsim
Txoj hlua
los ntawm
peb
los yog cam khwb cia
Lub hom phiaj
rau
Txoj hlua
tsis muaj kev txheeb xyuas, nyob ntawm kwj siv.
-
Cov ntaub ntawv ntws
Raws li qhov ntev tau xa ua ntej thiab bytes tom qab ntawd, kev nyeem ntawv yuav tsum ua tiav nyob rau tib qho kev txiav txim. Nyob rau hauv rooj plaub ntev yog xoom, tsis muaj dab tsi los nyeem. Lub hom phiaj yog deserialized thaum bytes tau hloov dua siab tshiab rau hauv ib qho piv txwv, hauv qhov no, ntawm
Txoj hlua
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); byte messageOut = "Nyob Zoo Ntiaj Teb".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + Cov hlua tshiab (messageOut)); int ntev = serverIn.readInt (); yog (ntev> 0) {byte messageIn = tshiab byte [ntev]; serverIn.readFully (messageIn, 0, messageIn.length); }}}
-
Lub hom phiaj ntws
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); String messageOut = "Nyob Zoo Ntiaj Teb"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + messageOut); String messageIn = (Txoj hlua) serverIn.readObject (); }}
Kauj Ruam 16. Nkag mus nyeem cov lus
Txhawm rau nkag mus rau lub hom phiaj, luam tawm rau lub console uas tau txais cov lus thiab luam nws cov ntsiab lus.
-
Cov ntaub ntawv ntws
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); DataOutputStream clientOut = tshiab DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = tshiab DataInputStream (client.getInputStream ()); DataOutputStream serverOut = tshiab DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = DataInputStream tshiab (txuas.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); byte messageOut = "Nyob Zoo Ntiaj Teb".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + Cov hlua tshiab (messageOut)); int ntev = serverIn.readInt (); yog (ntev> 0) {byte messageIn = tshiab byte [ntev]; serverIn.readFully (messageIn, 0, messageIn.length); System.out.println ("Cov lus tau txais los ntawm tus neeg siv khoom:" + Cov hlua tshiab (messageIn)); }}}
-
Lub hom phiaj ntws
ntshuam java.io. ObjectInputStream; ntshuam java.io. ObjectOutputStream; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); ObjectOutputStream clientOut = tshiab ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = tshiab ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = tshiab ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = tshiab ObjectInputStream (connection.getInputStream ()); System.out.println ("Kev sib txuas lus tau npaj lawm."); String messageOut = "Nyob Zoo Ntiaj Teb"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Cov lus xa mus rau server:" + messageOut); String messageIn = (Txoj hlua) serverIn.readObject (); System.out.println ("Cov lus tau txais los ntawm tus neeg siv khoom:" + messageIn); }}
Kauj Ruam 17. Txiav kev sib txuas
Kev sib txuas raug txiav tawm thaum ib tog neeg kaw nws cov kwj deg. Hauv Java, los ntawm kev kaw cov kwj tawm, cuam tshuam nrog lub qhov (socket) thiab cov dej nkag nkag tau raug kaw, ib yam. Thaum ib tog neeg ntawm lwm qhov kawg pom tias kev sib txuas tau tuag lawm, nws yuav tsum kaw nws cov kwj tawm, ib yam, txhawm rau tiv thaiv kev nco los.
// chaws rho tawm ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); // txoj cai rho tawm System.out.println ("Kev sib txuas lus tau npaj tiav."); // txoj cai rho tawm clientOut.close (); serverOut.close (); }}
Kauj Ruam 18. Txheeb cais
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub console sib txuas tau raug txiav tawm.
// chaws rho tawm ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); // txoj cai rho tawm System.out.println ("Kev sib txuas lus tau npaj tiav."); // txoj cai rho tawm clientOut.close (); serverOut.close (); System.out.println ("Kev sib txuas raug kaw."); }}
Kauj Ruam 19. Txiav server
Kev sib txuas tau raug txiav tawm, tab sis server tseem tab tom ua haujlwm. Raws li
ServerSocket
tsis cuam tshuam nrog ib qho kwj deg, nws yuav tsum tau hais kom meej meej kaw los ntawm kev hu xov tooj
kaw ()
txoj kev.
// chaws rho tawm ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); // txoj cai rho tawm System.out.println ("Kev sib txuas lus tau npaj tiav."); // txoj cai rho tawm clientOut.close (); serverOut.close (); System.out.println ("Kev sib txuas raug kaw."); neeg rau zaub mov.close (); }}
Kauj Ruam 20. Txiav tus neeg rau zaub mov txiav
Rau kev nkag mus rau lub hom phiaj, luam tawm rau lub server server tau raug txiav tawm.
// chaws rho tawm ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. Socket; pej xeem chav NetworkAppExample {pej xeem zoo li qub void lub ntsiab (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; ServerSocket server = ServerSocket tshiab (chaw nres nkoj, 50, InetAddress.getByName (tus tswv tsev)); System.out.println ("Server tau pib."); Qhov (socket) tus neeg siv = qhov (socket) tshiab (tus tswv tsev, chaw nres nkoj); System.out.println ("Txuas rau server …"); Qhov txuas txuas = server.accept (); System.out.println ("Kev sib txuas tau tsim."); // txoj cai rho tawm System.out.println ("Kev sib txuas lus tau npaj tiav."); // txoj cai rho tawm clientOut.close (); serverOut.close (); System.out.println ("Kev sib txuas raug kaw."); neeg rau zaub mov.close (); System.out.println ("Server tiav."); }}
Kauj Ruam 21. Sau thiab khiav
Nkag mus rau peb kom paub tias daim ntawv thov ua tiav lossis tsis. Kev cia siab tso tawm:
Neeg rau zaub mov pib. Txuas mus rau server… Kev sib txuas tau tsim. Kev sib txuas lus tau npaj txhij Cov lus xa mus rau server: Nyob Zoo Hauv Ntiaj Teb Cov lus tau txais los ntawm cov neeg siv: Nyob Zoo Ntiaj Teb Kev Sib Txuas raug kaw. Neeg rau zaub mov xaus.
Yog tias koj qhov kev tso tawm tsis zoo li qhov saum toj no, uas tsis zoo li yuav tshwm sim, muaj qee qhov kev daws teeb meem:
-
Yog tias qhov tso tawm nres ntawm kab
Tsim kev sib txuas.
thiab cov khoom kwj tau siv, yaug txhua qhov
ObjectOutputStream
- tam sim tom qab pib vim hais tias headers, rau qee qhov laj thawj, tsis tau xa.
-
Yog tias cov ntawv luam tawm
java.net. BindException: Chaw nyob twb tau siv lawm
- xaiv tus naj npawb chaw nres nkoj sib txawv vim tias ib qho tshwj xeeb twb tau siv lawm.
Lub tswv yim
- Kev txuas mus rau tus neeg rau zaub mov ntawm lub network sib txawv yog ua tiav los ntawm kev txuas mus rau sab nraud IP chaw nyob ntawm lub cuab yeej uas khiav cov server uas muaj chaw nres nkoj xa mus.
- Kev txuas mus rau tus neeg rau zaub mov ntawm tib lub network tau ua tiav los ntawm kev txuas mus rau tus IP tus kheej qhov chaw ntawm lub cuab yeej ua haujlwm rau server lossis xa chaw nres nkoj thiab txuas mus rau sab nraud IP chaw nyob ntawm lub cuab yeej.
- Muaj cov software, xws li Hamachi, uas tso cai txuas rau lub server hauv lwm lub network yam tsis tau xa chaw nres nkoj, tab sis nws xav tau kev teeb tsa software ntawm ob lub cuab yeej.
Piv txwv
Cov ntawv thov Network uas siv thaiv cov tswv yim/tso tawm yuav tsum siv xov. Cov piv txwv hauv qab no qhia txog cov neeg rau zaub mov tsawg thiab cov neeg siv khoom siv nrog cov xov. Kev sib tham hauv network yog qhov tseem ceeb tib yam li hauv kab lus tshwj tsis yog qee cov ntawv tau ua tiav, hloov mus rau hauv cov xov thiab qhov tshwj xeeb tau ua.
Server.java
ntshuam java.io. IOException; ntshuam java.net. InetAddress; ntshuam java.net. ServerSocket; ntshuam java.net. SocketException; ntshuam java.net. UnknownHostException; ntshuam java.util. ArrayList; ntshuam java.util. Collections; ntshuam java.util. List; /*** Chav kawm {@code Server} sawv cev rau lub server kawg-taw tes hauv lub network. {@code Server} ib zaug khi rau qee qhov IP * chaw nyob thiab chaw nres nkoj, tsim kev sib txuas nrog cov neeg siv khoom thiab muaj peev xwm sib txuas lus nrog lawv lossis txiav tawm lawv. *
* Chav kawm no yog xov xwm zoo. * * @version 1.0 * @see Client * @see Connection */ public class Server implements Runnable {private ServerSocket server; Cov npe ntiag tug
kev sib txuas; ntiag tug xov xov; ntiag tug zaum kawg Cov khoom sib txuasLock = Lub Hom Phiaj tshiab (); /** * Tsim kom muaj {@code Server} uas cuam tshuam nrog cov neeg siv khoom ntawm lub npe tshwj xeeb thiab chaw nres nkoj nrog qhov tshwj xeeb * thov kom ntev tshaj plaws ntawm kab ntawm cov neeg siv khoom tuaj. * * @param tus tswv tsev chaw nyob siv. * @param chaw nres nkoj Tus lej naj npawb los siv. * @param backlog Thov kom ntev tshaj plaws ntawm kab ntawm cov neeg siv khoom tuaj. * @throws NetworkException Yog tias yuam kev tshwm sim thaum pib server. */ public Server (String host, int port, int backlog) cuam NetworkException {sim {server = tshiab ServerSocket (chaw nres nkoj, rov qab, InetAddress.getByName (host))); } ntes (UnknownHostException e) {pov NetworkException tshiab ("Tus tswv lub npe tsis tuaj yeem daws tau:" + tus tswv, e); } ntes (IllegalArgumentException e) {pov tshiab NetworkException ("Tus lej chaw nres nkoj yuav tsum nyob nruab nrab ntawm 0 thiab 65535 (suav nrog):" + chaw nres nkoj); } ntes (IOException e) {pov NetworkException tshiab ("Server tsis tuaj yeem pib.", e); } kev sib txuas = Collections.synchronizedList (tshiab ArrayList ()); xov = xov tshiab (qhov no); xov.start (); } /*** Ua tus {@code Server} uas cuam tshuam nrog cov neeg siv khoom ntawm lub npe tshwj xeeb lub npe thiab chaw nres nkoj. * * @param tus tswv tsev chaw nyob txhawm rau khi. * @param chaw nres nkoj Tus lej naj npawb los khi. * @throws NetworkException Yog tias yuam kev tshwm sim thaum pib server. */ public Server (String host, int port) cuam NetworkException {qhov no (host, port, 50); } /*** Mloog rau, lees paub thiab sau npe cov khoom sib txuas los ntawm cov neeg siv khoom. */ @Override public void run () {while (! Server.isClosed ()) {sim {connections.add (Kev Sib Txuas tshiab (server.accept ()))); } ntes (SocketException e) {yog (! e.getMessage (). sib npaug ("Socket kaw")) {e.printStackTrace (); }} ntes (NetworkException | IOException e) {e.printStackTrace (); }}} /*** Xa cov ntaub ntawv rau txhua tus neeg siv khoom sau npe. * * @param cov ntaub ntawv Cov ntaub ntawv xa. * @throws IllegalStateException Yog tias sau cov ntaub ntawv tau sim thaum server tsis nyob. * @throws IllegalArgumentException Yog tias cov ntaub ntawv xa yog tsis muaj. */ public void broadcast (Object data) {if (server.isClosed ()) {pov tshiab IllegalStateException tshiab ("Cov ntaub ntawv tsis xa, server nyob offline."); } yog (data == null) {pov tshiab IllegalArgumentException ("null data"); } synchronized (connectionsLock) {rau (Kev sib txuas sib txuas: kev sib txuas) {sim {connection.send (cov ntaub ntawv)); System.out.println ("Cov ntaub ntawv xa mus rau tus neeg siv tau zoo."); } ntes (NetworkException e) {e.printStackTrace (); }}}} /*** Xa cov lus sib txuas thiab tshem tawm cov neeg siv tshwj xeeb. * * @param kev sib txuas Client kom txiav tawm. * @throws NetworkException Yog tias yuam kev tshwm sim thaum kaw kev sib txuas. */ pej xeem tsis muaj dab tsi cuam tshuam (Kev sib txuas sib txuas) cuam NetworkException {yog (sib txuas.remove (txuas))) {connection.close (); }} /*** Xa lus xa tawm mus rau txhua tus neeg siv khoom, txiav tawm lawv thiab tshem tawm cov neeg rau zaub mov. */ pej xeem void ze () cuam NetworkException {synchronized (connectionsLock) {rau (Kev sib txuas sib txuas: sib txuas) {sim {connection.close (); } ntes (NetworkException e) {e.printStackTrace (); }}} connections.clear (); sim {server.close (); } ntes (IOException e) {pov NetworkException tshiab ("Yuam kev thaum kaw server."); } thaum kawg {thread.interrupt (); }} /*** Rov qab los lossis tsis yog tus server nyob online. * * @return Tseeb yog tias server nyob online. Cuav, lwm yam. */ pej xeem boolean isOnline () {rov qab! server.isClosed (); } /*** Rov qab los ntawm cov npe ntawm cov neeg siv khoom. */ pej xeem kev sib txuas getConnections () {synchronized (connectionsLock) {xa kev sib txuas.toArray (Kev Sib Txuas tshiab [txuas.size ()])); }}}
Client.java
ntshuam java.io. IOException; ntshuam java.net. Socket; ntshuam java.net. UnknownHostException; /*** Chav kawm {@code Client} sawv cev rau tus neeg siv kawg-taw tes hauv lub network. {@code Client}, ib zaug txuas nrog qee tus * server, tau lees tias tsuas yog tuaj yeem sib txuas lus nrog tus neeg rau zaub mov. Txawm hais tias tsis yog lwm tus neeg tau txais cov ntaub ntawv * nyob ntawm kev siv server. *
* Chav kawm no yog xov xwm zoo. * * @version 1.0 * @see Server * @see Connection */ public class Client {ntiag tug kev sib txuas sib txuas; /*** Tsim ib {@code Client} txuas nrog tus neeg rau zaub mov ntawm tus tswv tsev tshwj xeeb thiab chaw nres nkoj. * * @param tus tswv tsev chaw nyob txhawm rau khi. * @param chaw nres nkoj Tus lej naj npawb los khi. * @throws NetworkException Yog tias yuam kev tshwm sim thaum pib server. */ public Client (String host, int port) cuam NetworkException {sim {kev sib txuas = txuas tshiab (Socket tshiab (tus tswv tsev, chaw nres nkoj)); } ntes (UnknownHostException e) {pov NetworkException tshiab ("Tus tswv lub npe tsis tuaj yeem daws tau:" + tus tswv, e); } ntes (IllegalArgumentException e) {pov tshiab NetworkException ("Tus lej chaw nres nkoj yuav tsum nyob nruab nrab ntawm 0 thiab 65535 (suav nrog):" + chaw nres nkoj); } ntes (IOException e) {pov NetworkException tshiab ("Server tsis tuaj yeem pib.", e); }} /*** Xa cov ntaub ntawv rau lwm tog neeg. * * @param cov ntaub ntawv Cov ntaub ntawv xa. * @throws NetworkException Yog tias sau ntawv mus rau cov kwj tawm tsis ua tiav. * @throws IllegalStateException Yog tias sau cov ntaub ntawv raug sim thaum kev sib txuas raug kaw. * @throws IllegalArgumentException Yog tias cov ntaub ntawv xa yog tsis muaj. * @throws UnsupportedOperationException Yog hom kev txhawb nqa cov ntaub ntawv tau sim xa. */ pej xeem void xa (Cov ntaub ntawv cov ntaub ntawv) cuam NetworkException {connection.send (cov ntaub ntawv)); } /*** Xa cov lus sib txuas mus rau, thiab kaw kev sib txuas nrog, server. */ pej xeem tsis muaj dab tsi kaw () cuam NetworkException {connection.close (); } /*** Rov qab los yog tsis yog tus neeg siv tau txuas nrog lub server. * * @return Tseeb yog tias tus neeg siv txuas nrog. Cuav, lwm yam. */ pej xeem boolean isOnline () {rov qab txuas.isConnected (); } /*** Rov qab {@link Kev Sib Txuas} piv txwv ntawm tus neeg siv khoom. */ pej xeem Kev sib txuas getConnection () {rov txuas; }}
Kev sib txuas.java
ntshuam java.io. DataInputStream; ntshuam java.io. DataOutputStream; ntshuam java.io. IOException; ntshuam java.net. Socket; ntshuam java.net. SocketException; /** * Chav kawm {@code Kev Sib Txuas} sawv cev rau kev sib txuas los ntawm server rau cov neeg siv khoom lossis cov neeg siv khoom kawg hauv lub network * {@code Connection}, ib zaug txuas nrog, tuaj yeem sib pauv cov ntaub ntawv nrog lwm tog lossis ob tog, nyob ntawm ntawm tus neeg rau zaub mov * kev siv. *
* Chav kawm no yog xov xwm zoo. * * @version 1.0 * @see Server * @see Client */ public class Connection implements Runnable {private Socket socket; ntiag tug DataOutputStream tawm; ntiag tug DataInputStream hauv; ntiag tug xov xov; ntiag tug qhov kawg Object writeLock = Lub Hom Phiaj tshiab (); tus kheej kawg Lub hom phiaj readLock = Lub Hom Phiaj tshiab (); /*** Tsim {@code Kev Sib Txuas} siv cov kwj ntawm qhov tshwj xeeb {@link Qhov Rooj}. * * @param lub qhov (Socket socket) kom nqa cov ntws los ntawm.*/ kev sib txuas rau pej xeem (Qhov (socket)) cuam NetworkException {yog (qhov (= socket) = null) {pov tshiab IllegalArgumentException tshiab ("qhov ntsaws ntsaws"); } this.socket = qhov (socket); sim {tawm = tshiab DataOutputStream (socket.getOutputStream ()); } ntes (IOException e) {pov NetworkException tshiab ("Tsis tuaj yeem nkag mus rau cov zis tso tawm.", e); } sim {hauv = DataInputStream tshiab (socket.getInputStream ()); } ntes (IOException e) {pov NetworkException tshiab ("Tsis tuaj yeem nkag mus rau cov dej nkag.", e); } xov = xov tshiab (qhov no); xov.start (); } /*** Nyeem ntawv thaum txuas nrog lwm tus neeg tseem muaj txoj sia nyob. */ @Override public void run () {thaum (! Socket.isClosed ()) {sim {int identifier; byte bytes; synchronized (readLock) {tus cim = in.readInt (); int ntev = hauv.readInt (); yog (ntev> 0) {bytes = tshiab byte [ntev]; in.readFully (bytes, 0, bytes.length); } lwm {txuas ntxiv mus; }} hloov (tus cim) {case Identifier. INTERNAL: Txoj hlua hais kom ua = txoj hlua tshiab (bytes); yog (command.equals ("disconnect")) {if (! socket.isClosed ()) {System.out.println ("Disconnection pob ntawv tau txais."); sim {kaw (); } ntes (NetworkException e) {rov qab; }}} tawg; case Identifier. TEXT: System.out.println ("Cov ntawv tau txais:" + Txoj hlua tshiab (bytes)); tawg; default: System.out.println ("Cov ntaub ntawv tsis tau txais."); }} ntes (SocketException e) {yog (! e.getMessage (). sib npaug ("Socket kaw")) {e.printStackTrace (); }} ntes (IOException e) {e.printStackTrace (); }}} /*** Xa cov ntaub ntawv rau lwm tog neeg. * * @param cov ntaub ntawv Cov ntaub ntawv xa. * @throws NetworkException Yog tias sau ntawv mus rau cov kwj tawm tsis ua tiav. * @throws IllegalStateException Yog tias sau cov ntaub ntawv raug sim thaum kev sib txuas raug kaw. * @throws IllegalArgumentException Yog tias cov ntaub ntawv xa yog tsis muaj. * @throws UnsupportedOperationException Yog hom kev txhawb nqa cov ntaub ntawv tau sim xa. */ pej xeem void xa (Cov ntaub ntawv cov ntaub ntawv) cuam NetworkException {yog (socket.isClosed ()) {pov tshiab IllegalStateException tshiab ("Cov ntaub ntawv tsis xa, txuas tau raug kaw."); } yog (data == null) {pov tshiab IllegalArgumentException ("null data"); } int tus cim; byte bytes; yog tias (cov ntaub ntawv piv txwv ntawm txoj hlua) {tus cim = tus cim cim. EXT; bytes = ((Txoj hlua) cov ntaub ntawv).getBytes (); } lwm {pov tshiab UnsupportedOperationException ("Cov ntaub ntawv tsis txhawb:" + data.getClass ()); } sim {synchronized (writeLock) {out.writeInt (tus cim)); tawm.writeInt (bytes.length); tawm.write (bytes); tawm.flush (); }} ntes (IOException e) {pov NetworkException tshiab ("Cov ntaub ntawv xa tsis tau.", e); }} /*** Xa lus xa tawm mus rau, thiab kaw kev sib txuas nrog, lwm tog neeg. */ public void close () cuam NetworkException {yog (socket.isClosed ()) {pov tshiab IllegalStateException tshiab ("Kev twb kev txuas twb raug kaw lawm."); } sim {byte message = "disconnect".getBytes (); synchronized (writeLock) {out.writeInt (Identifier. INTERNAL); tawm.writeInt (message.length); tawm.write (lus); tawm.flush (); }} ntes (IOException e) {System.out.println ("Cov lus sib txuas tsis tuaj yeem xa."); } sim {synchronized (writeLock) {out.close (); }} ntes (IOException e) {pov NetworkException tshiab ("Yuam kev thaum kaw qhov txuas.", e); } thaum kawg {thread.interrupt (); }} /*** Rov qab los lossis tsis txuas nrog lwm tus neeg tseem muaj txoj sia nyob. * * @return Tseeb yog tias kev sib txuas tseem muaj sia. Cuav, lwm yam. */ public boolean isConnected () {return! socket.isClosed (); }}
Identifier.java
/** * Chav kawm {@code Identifier} muaj qhov siv los ntawm {@link Kev Sib Txuas} rau kev ua ntu zus thiab ua kom cov ntaub ntawv * xa mus thoob lub network. * * @version 1.0 * @see Connection * / public final class Identifier { / ** * Identifier for internal messages. */ pej xeem zoo li qub kawg INTERNAL = 1; /*** Tus cim rau cov ntawv nyeem. */ pej xeem zoo li qub zaum kawg int TEXT = 2; }
NetworkException.java
/*** Chav kawm {@code NetworkException} qhia txog qhov ua yuam kev cuam tshuam nrog network. * / pej xeem chav NetworkException ncua kev zam { / *** Tsim ib {@code NetworkException} nrog {@code null} raws li nws cov lus. * / pej xeem NetworkException () {} / *** Tsim ib {@code NetworkException} nrog cov lus tshwj xeeb. * * @param message Cov lus piav qhia txog qhov ua yuam kev. */ pej xeem NetworkException (Cov lus xov) {super (xov); } /*** Tsim ib {@code NetworkException} nrog cov lus tshwj xeeb thiab ua rau. * * @param message Cov lus piav qhia txog qhov ua yuam kev. * @param ua rau Qhov ua rau yuam kev. */ pej xeem NetworkException (Txoj hlua xov, Throwable ua rau) {super (lus, ua rau); } /*** Tsim ib {@code NetworkException} nrog rau qhov ua tshwj xeeb. * * @param ua rau Qhov ua rau yuam kev. */ pej xeem NetworkException (Throwable ua rau) {super (ua rau)); }}
UsageExample.java
/*** Chav kawm {@code UsageExample} qhia txog kev siv ntawm {@link Server} thiab {@link Client}. Cov piv txwv no siv * {@link Xov#pw (ntev)} kom ntseeg tau tias txhua ntu tau ua tiav vim tias pib sai thiab kaw ua rau qee qhov * ntu tsis ua. * * @version 1.0 * @see Server * @see Client */ public class UsageExample {pej xeem zoo li qub tsis muaj dab tsi tseem ceeb (Txoj hlua args) cuam tshuam kev zam {String host = "localhost"); int chaw nres nkoj = 10430; Neeg rau zaub mov neeg rau zaub mov = neeg rau zaub mov tshiab (tus tswv tsev, chaw nres nkoj); Client client = Client tshiab (tus tswv tsev, chaw nres nkoj); Xov.sleep (100L); client.send ("Nyob zoo."); server.broadcast ("Hav, phooj ywg!"); Xov.sleep (100L); server.disconnect (server.getConnections () [0]); // lossis client.close () txhawm rau txiav tawm ntawm cov neeg siv khoom sab server.close (); }}