በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን እንዴት መፍጠር እንደሚቻል (ከስዕሎች ጋር)

ዝርዝር ሁኔታ:

በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን እንዴት መፍጠር እንደሚቻል (ከስዕሎች ጋር)
በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን እንዴት መፍጠር እንደሚቻል (ከስዕሎች ጋር)

ቪዲዮ: በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን እንዴት መፍጠር እንደሚቻል (ከስዕሎች ጋር)

ቪዲዮ: በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን እንዴት መፍጠር እንደሚቻል (ከስዕሎች ጋር)
ቪዲዮ: ስልካችንን ከ ቲቪ (Tv) እንዴት ማገናኘት እንችላለን? How to connect phone to TV??? 2024, ግንቦት
Anonim

በአንድ መሣሪያ ላይ የሚፈፀም ኮድ መጻፍ በጣም አርኪ ነው። ነገር ግን ፣ እርስ በእርስ በሚገናኙ በብዙ መሣሪያዎች ላይ የሚፈፀም ኮድ መጻፍ በቀላሉ ሕይወትን የሚያረጋግጥ ነው። ይህ ጽሑፍ የማስተላለፊያ መቆጣጠሪያ ፕሮቶኮል (TCP) ን በመጠቀም በአውታረ መረብ ላይ መልዕክቶችን እንዴት ማገናኘት እና መለዋወጥ እንደሚችሉ ያስተምርዎታል።

በዚህ ጽሑፍ ውስጥ ኮምፒተርዎን ከራሱ ጋር የሚያገናኝ እና በዋናነት እብድ የሚያደርግ መተግበሪያን ያዘጋጃሉ - ከራሱ ጋር ይነጋገሩ። እንዲሁም በጃቫ ውስጥ ለአውታረ መረብ በሰፊው ጥቅም ላይ በሚውሉት በሁለቱ ዥረቶች መካከል ያለውን ልዩነት እና እንዴት እንደሚሠሩ ይማራሉ።

የውሂብ እና የነገር ዥረቶች

ወደ ኮድ ከመጥለቁ በፊት በአንቀጹ ውስጥ በተጠቀሱት በሁለቱ ዥረቶች መካከል ያለውን ልዩነት መለየት ያስፈልጋል።

የውሂብ ዥረቶች

የውሂብ ዥረቶች የጥንታዊ የውሂብ ዓይነቶችን እና ሕብረቁምፊዎችን ያካሂዳሉ። በውሂብ ዥረቶች ላይ የተላከ ውሂብ በእጅ የተደራጀ እና የተፈለሰፈ መሆን አለበት ይህም ውስብስብ ውሂብን ለማስተላለፍ አስቸጋሪ ያደርገዋል። ግን ፣ የውሂብ ዥረቶች ከጃቫ ይልቅ በሌሎች ቋንቋዎች ከተፃፉ አገልጋዮች እና ደንበኞች ጋር መገናኘት ይችላሉ። ጥሬ ዥረቶች በዚያ ገጽታ ውስጥ ካሉ የውሂብ ዥረቶች ጋር ተመሳሳይ ናቸው ፣ ግን የውሂብ ዥረቶች ውሂቡ በመድረክ ገለልተኛ በሆነ መንገድ መቅረቡን ያረጋግጣሉ ፣ ይህም ሁለቱም ወገኖች የተላከውን ውሂብ ማንበብ ስለሚችሉ ነው።

የነገር ዥረቶች

የነገር ዥረቶች የጥንታዊ የውሂብ ዓይነቶችን እና የሚተገበሩ ነገሮችን ያካሂዳሉ

Serializable

በይነገጽ። በነገር ዥረቶች ላይ የተላከ ውሂብ በራስ -ሰር ተከታታይነት ያለው እና ተልዕኮ ያለው ሲሆን ይህም ውስብስብ ውሂብን ለማስተላለፍ ቀላል ያደርገዋል። ግን ፣ የነገር ዥረቶች በጃቫ ከተፃፉ አገልጋዮች እና ደንበኞች ጋር ብቻ መገናኘት ይችላሉ። እንዲሁም ፣

ObjectOutputStream

፣ ሲነሳ ፣ ወደ ራስጌ ይልካል

የግቤት ዥረት

ራስጌው እስኪደርሰው ድረስ መነሳቱን የሚገድብ የሌላኛው ወገን።

ደረጃዎች

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step1
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step1

ደረጃ 1. ክፍል ይፍጠሩ።

ክፍል ይፍጠሩ እና በፈለጉት መንገድ ይሰይሙት። በዚህ ጽሑፍ ውስጥ ስሙ ይሰየማል

NetworkAppExample

የህዝብ መደብ NetworkAppExample {}

በጃቫ Step2 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step2 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 2. ዋና ዘዴ ይፍጠሩ።

ዋና ዘዴን ይፍጠሩ እና የማይካተቱትን ሊጥል እንደሚችል ያውጁ

ልዩ

ዓይነት እና ማንኛውም ንዑስ ክፍል - ሁሉም የማይካተቱ። ይህ እንደ መጥፎ ልምምድ ይቆጠራል ፣ ግን ለባዶ አጥንት ምሳሌዎች ተቀባይነት አለው።

የህዝብ መደብ NetworkAppExample {public static void main (String args) ይጥላል ልዩነትን}}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step3
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step3

ደረጃ 3. የአገልጋይ አድራሻውን ያውጁ።

ይህ ምሳሌ የአከባቢ አስተናጋጅ አድራሻ እና የዘፈቀደ የወደብ ቁጥርን ይጠቀማል። የወደብ ቁጥር ከ 0 እስከ 65535 (አካታች) ባለው ክልል ውስጥ መሆን አለበት። ሆኖም ፣ የወደብ ቁጥሮች የተያዙት የስርዓት ወደቦች በመሆናቸው ከ 0 እስከ 1023 (አካታች) እንዳይደርስባቸው።

የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; }}

በጃቫ Step4 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step4 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 4. አገልጋይ ይፍጠሩ።

አገልጋዩ ከአድራሻው እና ወደቡ ጋር የተሳሰረ ሲሆን መጪ ግንኙነቶችን ያዳምጣል። በጃቫ ፣

የአገልጋይ ሶኬት

የአገልጋይ-ጎን መጨረሻን ይወክላል እና ተግባሩ አዲስ ግንኙነቶችን መቀበል ነው።

የአገልጋይ ሶኬት

መረጃን ለማንበብ እና ለመላክ ጅረቶች የሉትም ምክንያቱም በአገልጋይ እና በደንበኛ መካከል ግንኙነትን አይወክልም።

java.net. InetAddress; java.net. ServerSocket አስመጣ; የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket server = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step5
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step5

ደረጃ 5. የምዝግብ ማስታወሻ አገልጋይ መጀመሪያ።

ለግንባታ ዓላማዎች አገልጋዩ ወደ ተጀመረበት ኮንሶል ያትሙ።

java.net. InetAddress; java.net. ServerSocket አስመጣ; የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); }}

በጃቫ Step6 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step6 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 6. ደንበኛ ይፍጠሩ።

ደንበኛው ከአገልጋዩ አድራሻ እና ወደብ ጋር የተሳሰረ ሲሆን ግንኙነቱ ከተመሰረተ በኋላ ጥቅሎችን (መልዕክቶችን) ያዳምጣል። በጃቫ ፣

ሶኬት

ከአገልጋዩ ጋር የተገናኘ የደንበኛ-ጎን የመጨረሻ ነጥብ ወይም ግንኙነት (ከአገልጋይ) ወደ ደንበኛ ይወክላል እና በሌላኛው ወገን ከፓርቲው ጋር ለመገናኘት ያገለግላል።

java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket server = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); }}

በጃቫ Step7 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step7 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 7. የምዝግብ ማስታወሻ ግንኙነት ሙከራ።

ለግንባታ ዓላማዎች ፣ ግንኙነቱ እንደተሞከረ ወደ መሥሪያው ያትሙ።

java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step8
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step8

ደረጃ 8. ግንኙነት መመስረት።

አገልጋዩ ካልሰማ እና ካልተቀበለ በስተቀር ደንበኞች በጭራሽ አይገናኙም ፣ በሌላ አነጋገር ግንኙነቶችን እስካልመሰረተ ድረስ። በጃቫ ውስጥ ግንኙነቶች በመጠቀም ይዘጋጃሉ

ተቀበል ()

ዘዴ

የአገልጋይ ሶኬት

ክፍል። ደንበኛው እስኪገናኝ ድረስ ዘዴው አፈፃፀምን ያግዳል።

java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step9
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step9

ደረጃ 9. የተቋቋመ ግንኙነትን ይመዝግቡ።

ለግንባታ ዓላማዎች በአገልጋይ እና በደንበኛ መካከል ያለው ግንኙነት እንደተቋቋመ ወደ ኮንሶሉ ያትሙ።

java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); }}

በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን ይፍጠሩ Step10
በጃቫ ውስጥ የአውታረ መረብ መተግበሪያን ይፍጠሩ Step10

ደረጃ 10. የግንኙነት ዥረቶችን ያዘጋጁ።

በዥረቶች ላይ የሚደረግ ግንኙነት ይከናወናል ፣ እና በዚህ ትግበራ ፣ ጥሬ (የ) ግንኙነት ከአገልጋይ (ለደንበኛ) እና ለደንበኛው በውሂብ ወይም በነገር ዥረቶች ላይ በሰንሰለት መታሰር አለባቸው። ያስታውሱ ፣ ሁለቱም ወገኖች አንድ ዓይነት የዥረት ዓይነት መጠቀም አለባቸው።

  • የውሂብ ዥረቶች

    java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); }}

  • የነገር ዥረቶች

    ብዙ የነገር ዥረቶች ጥቅም ላይ ሲውሉ የግቤት ዥረቶች ልክ እንደ የውጤት ዥረቶች በተመሳሳይ ቅደም ተከተል መነሳት አለባቸው ምክንያቱም

    ObjectOutputStream

    ወደ ሌላኛው ወገን ራስጌ ይልካል እና

    ObjectInputStream

    ራስጌውን እስኪያነብ ድረስ አፈፃፀሙን ያግዳል።

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket server = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); }}

    ከላይ ባለው ኮድ ውስጥ እንደተገለጸው ለማስታወስ ቀላል ሊሆን ይችላል - መጀመሪያ የውጤት ዥረቶችን ያስጀምሩ ከዚያም በተመሳሳይ ቅደም ተከተል ውስጥ ዥረቶችን ያስገቡ። ሆኖም ፣ የነገሮችን ዥረቶች ለመጀመር ሌላ ትዕዛዝ የሚከተለው ነው

    ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ());

በጃቫ Step11 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step11 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 11. ግንኙነቱ ዝግጁ መሆኑን ይመዝግቡ።

ለግንባታ ዓላማዎች ፣ ግንኙነቱ ዝግጁ መሆኑን ወደ መሥሪያው ያትሙ።

// ኮድ አስመጣ java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); // ኮድ ተወግዷል System.out.println ("ግንኙነት ዝግጁ ነው"); }}

በጃቫ Step12 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step12 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 12. መልዕክት ይፍጠሩ።

በዚህ መተግበሪያ ውስጥ ፣

ሰላም ልዑል

ጽሑፍ እንደ ወይም ለአገልጋዩ ይላካል

ባይት

ወይም

ሕብረቁምፊ

. ጥቅም ላይ በሚውለው ዥረት ላይ የሚመረኮዘውን ዓይነት ተለዋዋጭ ያውጁ። ይጠቀሙ

ባይት

ለመረጃ ዥረቶች እና

ሕብረቁምፊ

ለነገሮች ዥረቶች።

  • የውሂብ ዥረቶች

    የውሂብ ዥረቶችን በመጠቀም ተከታታይነት የሚከናወነው ነገሮችን ወደ ጥንታዊ የውሂብ ዓይነቶች በመለወጥ ወይም ሀ

    ሕብረቁምፊ

    . በዚህ ሁኔታ እ.ኤ.አ.

    ሕብረቁምፊ

    ወደ ተለውጧል

    ባይት

    በመጠቀም ከመጻፍ ይልቅ

    ጻፍ ባይቶች ()

    እንደ ምስሎች ወይም ሌሎች ፋይሎች ካሉ ሌሎች ነገሮች ጋር እንዴት እንደሚደረግ ለማሳየት ዘዴ።

    java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ባይት messageOut = "ሰላም ዓለም".getBytes (); }}

  • የነገር ዥረቶች

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket server = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ሕብረቁምፊ messageOut = "ሰላም ዓለም"; }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step13
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step13

ደረጃ 13. መልዕክቱን ይላኩ።

ውሂቡ ሙሉ በሙሉ መፃፉን ለማረጋገጥ ወደ ውፅዓት ዥረቱ ውሂብ ይፃፉ እና ዥረቱን ያጥቡት።

  • የውሂብ ዥረቶች

    ሌላኛው ወገን ምን ያህል ባይት ማንበብ እንዳለበት ያውቅ ዘንድ የመልዕክቱ ርዝመት መጀመሪያ መላክ አለበት። ርዝመቱ እንደ ጥንታዊ ኢንቲጀር ዓይነት ከተላከ በኋላ ባይት ሊላክ ይችላል።

    java.io. DataInputStream ን ያስመጡ; java.io. DataOutputStream ን ያስመጡ; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket server = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ባይት messageOut = "ሰላም ዓለም".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); }}

  • የነገር ዥረቶች

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ሕብረቁምፊ messageOut = "ሰላም ዓለም"; clientOut.writeObject (messageOut); clientOut.flush (); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ደረጃ 14
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ደረጃ 14

ደረጃ 14. የተላከ መልእክት ምዝግብ ማስታወሻ።

ለግንባታ ዓላማዎች ፣ መልእክቱ ወደተላከው ኮንሶል ያትሙ።

  • የውሂብ ዥረቶች

    java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ባይት messageOut = "ሰላም ዓለም".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት:" + አዲስ ሕብረቁምፊ (messageOut)); }}

  • የነገር ዥረቶች

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ሕብረቁምፊ messageOut = "ሰላም ዓለም"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት" + messageOut); }}

በጃቫ Step15 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step15 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 15. መልእክቱን ያንብቡ።

ከግብዓት ዥረት ውሂብ ያንብቡ እና ይለውጡት። የተላከውን የውሂብ አይነት በትክክል ስለምናውቅ ፣ እኛ አንድ እንፈጥራለን

ሕብረቁምፊ

ባይት

ወይም ይጣሉት

ነገር

ወደ

ሕብረቁምፊ

ጥቅም ላይ በሚውለው ዥረት ላይ በመመስረት ያለ ማጣራት።

  • የውሂብ ዥረቶች

    ርዝመቱ መጀመሪያ እንደተላከ እና በኋላ ባይት እንደመሆኑ ፣ ንባብ በተመሳሳይ ቅደም ተከተል መከናወን አለበት። የጉዳይ ርዝመት ዜሮ ከሆነ ፣ ለማንበብ ምንም ነገር የለም። ባይት ወደ ምሳሌነት ሲቀየር ፣ ነገሩ deserialized ነው ፣ በዚህ ሁኔታ ፣ ከ

    ሕብረቁምፊ

    java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ባይት messageOut = "ሰላም ዓለም".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት:" + አዲስ ሕብረቁምፊ (messageOut)); int ርዝመት = serverIn.readInt (); ከሆነ (ርዝመት> 0) {byte messageIn = አዲስ ባይት [ርዝመት]; serverIn.readFully (messageIn ፣ 0 ፣ messageIn.length) ፤ }}}

  • የነገር ዥረቶች

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ሕብረቁምፊ messageOut = "ሰላም ዓለም"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት" + messageOut); ሕብረቁምፊ መልእክትIn = (ሕብረቁምፊ) serverIn.readObject (); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ደረጃ 16
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ደረጃ 16

ደረጃ 16. የምልክት ንባብ መልእክት።

ለግንባታ ዓላማዎች ፣ መልእክቱ ወደደረሰበት ኮንሶል ያትሙ እና ይዘቱን ያትሙ።

  • የውሂብ ዥረቶች

    java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); DataOutputStream clientOut = አዲስ DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = አዲስ DataInputStream (client.getInputStream ()); DataOutputStream serverOut = አዲስ DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = አዲስ DataInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ባይት messageOut = "ሰላም ዓለም".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት:" + አዲስ ሕብረቁምፊ (messageOut)); int ርዝመት = serverIn.readInt (); ከሆነ (ርዝመት> 0) {byte messageIn = አዲስ ባይት [ርዝመት]; serverIn.readFully (messageIn ፣ 0 ፣ messageIn.length) ፤ System.out.println ("ከደንበኛ የተቀበለው መልዕክት" + አዲስ ሕብረቁምፊ (messageIn)); }}}

  • የነገር ዥረቶች

    ማስመጣት java.io. ObjectInputStream; ማስመጣት java.io. ObjectOutputStream; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); ObjectOutputStream clientOut = አዲስ ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = አዲስ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = አዲስ ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = አዲስ ObjectInputStream (connection.getInputStream ()); System.out.println ("ግንኙነት ዝግጁ ነው"); ሕብረቁምፊ messageOut = "ሰላም ዓለም"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("ለአገልጋይ የተላከ መልእክት" + messageOut); ሕብረቁምፊ መልእክትIn = (ሕብረቁምፊ) serverIn.readObject (); System.out.println ("ከደንበኛ የተቀበለው መልዕክት" + messageIn); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ።17
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ ።17

ደረጃ 17. ግንኙነቶችን ያላቅቁ።

አንድ ፓርቲ ዥረቶቹን ሲዘጋ ግንኙነቱ ተቋርጧል። በጃቫ ውስጥ የውጤት ዥረቱን በመዝጋት ፣ ተጓዳኝ ሶኬት እና የግብዓት ዥረት እንዲሁ ተዘግተዋል። በሌላኛው ወገን አንድ ወገን ግንኙነቱ እንደሞተ ካወቀ ፣ የማስታወሻ ፍሳሾችን ለመከላከል የውጤት ዥረቱንም መዝጋት አለበት።

// ኮድ አስመጣ java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); // ኮድ ተወግዷል System.out.println ("ግንኙነት ዝግጁ ነው"); // ኮድ ተወቷል clientOut.close (); serverOut.close (); }}

በጃቫ ደረጃ 18 V2 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ ደረጃ 18 V2 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 18. የምዝግብ ማስታወሻን ማቋረጥ።

ለግንባታ ዓላማዎች ፣ ወደ ኮንሶል ግንኙነቶች ማተም ተቋርጧል።

// ኮድ አስመጣ java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); // ኮድ ተወግዷል System.out.println ("ግንኙነት ዝግጁ ነው"); // ኮድ ተወቷል clientOut.close (); serverOut.close (); System.out.println ("ግንኙነቶች ተዘግተዋል"); }}

በጃቫ Step19 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ
በጃቫ Step19 ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ

ደረጃ 19. አገልጋይ ማቋረጥ።

ግንኙነቶች ተለያይተዋል ፣ ግን አገልጋዩ አሁንም እየሰራ ነው። እንደ

የአገልጋይ ሶኬት

ከማንኛውም ዥረት ጋር አልተገናኘም ፣ በመደወል በግልፅ መዘጋት አለበት

ገጠመ()

ዘዴ።

// ኮድ አስመጣ java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); // ኮድ ተወግዷል System.out.println ("ግንኙነት ዝግጁ ነው"); // ኮድ ተወቷል clientOut.close (); serverOut.close (); System.out.println ("ግንኙነቶች ተዘግተዋል"); server.close (); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step20
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step20

ደረጃ 20. የምዝግብ ማስታወሻ አገልጋይ መቋረጥ።

ለግንባታ ዓላማዎች ፣ ወደ ኮንሶል አገልጋዩ ማተም ተቋርጧል።

// ኮድ አስመጣ java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ። የህዝብ መደብ NetworkAppExample {public static void main (String args) Exception ይጥላል {String host = "localhost"; int ወደብ = 10430; ServerSocket አገልጋይ = አዲስ ServerSocket (ወደብ ፣ 50 ፣ InetAddress.getByName (አስተናጋጅ)); System.out.println ("አገልጋይ ተጀምሯል"); የሶኬት ደንበኛ = አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ); System.out.println ("ከአገልጋይ ጋር በመገናኘት ላይ …"); የሶኬት ግንኙነት = server.accept (); System.out.println ("ግንኙነት ተቋቁሟል"); // ኮድ ተወግዷል System.out.println ("ግንኙነት ዝግጁ ነው"); // ኮድ ተወቷል clientOut.close (); serverOut.close (); System.out.println ("ግንኙነቶች ተዘግተዋል"); server.close (); System.out.println ("አገልጋይ ተቋርጧል"); }}

በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step21
በጃቫ ውስጥ የአውታረ መረብ ትግበራ ይፍጠሩ Step21

ደረጃ 21. ማጠናቀር እና መሮጥ።

ምዝግብ ማስታወሻው ማመልከቻው የተሳካ መሆኑን ወይም እንዳልሆነ ለማወቅ አስችሎናል። የሚጠበቀው ውጤት ፦

አገልጋይ ተጀምሯል። ከአገልጋይ ጋር በመገናኘት ላይ… ግንኙነት ተቋቋመ። መግባባት ዝግጁ ነው። መልዕክት ወደ አገልጋይ ተልኳል - ሰላም የዓለም መልእክት ከደንበኛ የተቀበለው ሰላም ዓለም ግንኙነቶች ተዘግተዋል። አገልጋይ ተቋርጧል።

የእርስዎ ውጤት ከላይ እንደተጠቀሰው ካልሆነ ፣ ሊከሰት የማይችል ከሆነ ፣ ጥቂት መፍትሄዎች አሉ-

  • ውፅዓት በመስመሩ ላይ ካቆመ

    ግንኙነት ተቋቋመ።

    እና የነገር ዥረቶች ጥቅም ላይ ይውላሉ ፣ እያንዳንዱን ያጥፉ

    ObjectOutputStream

  • ወዲያውኑ ከተነሳ በኋላ ራስጌዎች ፣ በሆነ ምክንያት ፣ አልተላኩም።
  • የውጤቱ ህትመት ከሆነ

    java.net. BindException: አድራሻ አስቀድሞ ጥቅም ላይ ውሏል

  • ፣ የተገለጸው አስቀድሞ ጥቅም ላይ ስለዋለ የተለየ የወደብ ቁጥር ይምረጡ።

ጠቃሚ ምክሮች

  • በተለየ አውታረ መረብ ላይ ከአገልጋይ ጋር መገናኘት የሚከናወነው የተላለፈ ወደብ ካለው አገልጋይ ከሚሠራው መሣሪያ የአይፒ አድራሻ ጋር በመገናኘት ነው።
  • በተመሳሳዩ አውታረ መረብ ላይ ከአገልጋይ ጋር መገናኘት የሚከናወነው አገልጋዩን ከሚያስተዳድረው መሣሪያ የግል አይፒ አድራሻ ጋር በመገናኘት ወይም ወደብ በማስተላለፍ እና ከመሣሪያው ውጫዊ የአይፒ አድራሻ ጋር በመገናኘት ነው።
  • ወደብ ሳያስተላልፉ በተለየ አውታረ መረብ ላይ ከአገልጋዩ ጋር መገናኘት የሚፈቅዱ እንደ ሃማቺ ያሉ ሶፍትዌሮች አሉ ፣ ግን በሁለቱም መሣሪያዎች ላይ ሶፍትዌሩን መጫን ይፈልጋል።

ምሳሌዎች

የመግቢያ/ውፅዓት ማገድን የሚጠቀሙ የአውታረ መረብ መተግበሪያዎች ክሮች መጠቀም አለባቸው። የሚከተሉት ምሳሌዎች ዝቅተኛነት ያለው አገልጋይ እና የደንበኛ አተገባበርን ከክሮች ጋር ያሳያሉ። አንዳንድ ቅንጥቦች ከተመሳሰሉ ፣ ወደ ክሮች ከተወሰዱ እና ልዩ ሁኔታዎች ካልተያዙ በስተቀር የአውታረ መረብ ኮድ በመሠረቱ በአንቀጹ ውስጥ ካለው ጋር ተመሳሳይ ነው።

አገልጋይ.ጃቫ

ማስመጣት java.io. IOException; java.net. InetAddress; java.net. ServerSocket አስመጣ; java.net አስመጣ. SocketException; java.net ማስመጣት አስመጣ java.util. ArrayList; java.util ማስመጣት; አስመጣ java.util. List; /*** ክፍሉ {@code Server} በአውታረ መረብ ውስጥ የአገልጋይ የመጨረሻ ነጥብን ይወክላል። {@code Server} አንዴ ከተወሰነ አይፒ * አድራሻ እና ወደብ ጋር ከተሳሰረ ከደንበኞች ጋር ግንኙነቶችን ያቋቁማል እና ከእነሱ ጋር መገናኘት ወይም ማለያየት ይችላል። *

* ይህ ክፍል ደህንነቱ የተጠበቀ ነው። * * @version 1.0 * @see Client * @see Connection */ public class አገልጋይ Runnable ን ተግባራዊ ያደርጋል {የግል ServerSocket server; የግል ዝርዝር ግንኙነቶች; የግል ክር ክር; የግል የመጨረሻ ነገር ግንኙነቶችLock = አዲስ ነገር (); /** * በተጠቀሰው የአስተናጋጅ ስም እና ወደብ ላይ ከተገልጋዮች ጋር መስተጋብር የሚፈጥር {@code Server} ይገነባል * ከተጠየቀው * የገቢ ደንበኞች የወረፋ ከፍተኛ ርዝመት። * * @param የአስተናጋጅ አድራሻ ለመጠቀም። * @param ወደብ ቁጥር ለመጠቀም። * @param backlog የገቢ ደንበኞች ወረፋ ከፍተኛውን ርዝመት ጠይቋል። * @throws NetworkException አገልጋይ ሲጀምሩ ስህተት ከተከሰተ። */ የህዝብ አገልጋይ (ሕብረቁምፊ አስተናጋጅ ፣ int ወደብ ፣ int backlog) NetworkException ን ይጥላል {ይሞክሩ {አገልጋይ = አዲስ ServerSocket (ወደብ ፣ የኋላ መዝገብ ፣ InetAddress.getByName (አስተናጋጅ)); } መያዝ (UnknownHostException e) {አዲስ NetworkException ን ይጥሉ (“የአስተናጋጅ ስም ሊፈታ አልቻለም” + አስተናጋጅ ፣ ሠ); } መያዝ (ህገወጥ አከራካሪ ፅንሰ -ሀሳብ ሠ) {አዲስ NetworkException ን ይጥሉ (“የወደብ ቁጥር ከ 0 እስከ 65535 (ያካተተ) መካከል መሆን አለበት” + ወደብ) ፤ } መያዝ (IOException e) {አዲስ NetworkException ን ይጥሉ (“አገልጋይ መጀመር አልተቻለም” ፣ ሠ) ፤ } ግንኙነቶች = ስብስቦች.synchronizedList (አዲስ ArrayList ()); ክር = አዲስ ክር (ይህ); thread.start (); } /*** በተጠቀሰው የአስተናጋጅ ስም እና ወደብ ላይ ከደንበኞች ጋር የሚገናኝ {@code Server} ይገነባል። * * @param አስተናጋጅ የአስተናጋጅ አድራሻ ለማሰር። * @param ወደብ ቁጥር ለማሰር። * @throws NetworkException አገልጋይ ሲጀምሩ ስህተቶች ከተከሰቱ። */ የህዝብ አገልጋይ (ሕብረቁምፊ አስተናጋጅ ፣ int ወደብ) የ NetworkException ን ይጥላል {ይህ (አስተናጋጅ ፣ ወደብ ፣ 50) ፤ } /*** ገቢ ግንኙነቶችን ከደንበኞች ያዳምጣል ፣ ይቀበላል እንዲሁም ይመዘግባል። */ @Override public void run () {while (! Server.isClosed ()) {ይሞክሩ {ግንኙነቶች.add (አዲስ ግንኙነት (server.accept ()))); } መያዝ (SocketException e) {ከሆነ (! e.getMessage ()። እኩል ("ሶኬት ተዘግቷል")) {e.printStackTrace (); }} መያዝ (NetworkException | IOException e) {e.printStackTrace (); }}} /*** ለሁሉም የተመዘገቡ ደንበኞች ውሂብ ይልካል። * * @param ውሂብ ለመላክ ውሂብ። * @throws IllegalStateException አገልጋዩ ከመስመር ውጭ በሚሆንበት ጊዜ ውሂብ የመፃፍ ሙከራ ከተደረገ። * @ይወርዳል ሕገ -ወጥ ክርክር። ለመላክ ውሂብ ከንቱ ከሆነ። */ የህዝብ ባዶ ስርጭት (የነገር ውሂብ) {ከሆነ (server.isClosed ()) {አዲስ ህገወጥStateException ን ይጥሉ (“ውሂብ አልተላከም ፣ አገልጋዩ ከመስመር ውጭ ነው”) ፤ } ከሆነ (ውሂብ == ባዶ) {አዲስ ህገወጥ አከራካሪ ፅንሰ -ሀሳብ (“ባዶ መረጃ”) ይጥሉ ፤ } የተመሳሰለ (ግንኙነቶችLock) {ለ (የግንኙነት ግንኙነት ፦ ግንኙነቶች) {ይሞክሩ {connection.send (ውሂብ) ፤ System.out.println ("ውሂብ ለደንበኛ በተሳካ ሁኔታ ተልኳል"); } መያዝ (NetworkException e) {e.printStackTrace (); }}}} /*** የግንኙነት ግንኙነት መልእክት ይልካል እና የተገለጸውን ደንበኛ ያላቅቃል። * * @param ግንኙነት ለማቋረጥ ደንበኛ። * @throws NetworkException ግንኙነቱን በሚዘጋበት ጊዜ ስህተት ከተከሰተ። */ የህዝብ ባዶ ግንኙነት ማቋረጥ (የግንኙነት ግንኙነት) የ NetworkException ን ይጥላል (ከሆነ (ግንኙነቶች። }} /*** የግንኙነት ግንኙነትን ለሁሉም ደንበኞች ይልካል ፣ ያላቅቃቸዋል እና አገልጋዩን ያቋርጣል። */ የወል ባዶነት ቅርብ () NetworkException {synchronized (ግንኙነቶችLock) {for (የግንኙነት ግንኙነት ፦ ግንኙነቶች) {ይሞክሩ {connection.close (); } መያዝ (NetworkException e) {e.printStackTrace (); }}} ግንኙነቶች። ግልጽ (); ሞክር {server.close (); } መያዝ (IOException e) {አዲስ NetworkException ን ይጥሉ (“አገልጋዩን በመዝጋት ላይ ስህተት”) ፤ } በመጨረሻ {thread.interrupt (); }} /*** አገልጋዩ መስመር ላይ ይሁን አይሁን ይመልሳል። * * @አገልጋይ መስመር ላይ ከሆነ እውነት ይመለሱ። ውሸት ፣ አለበለዚያ። */ የህዝብ ቡሊያን isOnline () {መመለስ! server.isC ዝግ (); } /*** የተመዘገቡ ደንበኞችን ድርድር ይመልሳል። */ የህዝብ ግንኙነት getConnections () {የተመሳሰለ (ግንኙነቶችLock) {ተመላሽ ግንኙነቶች.toArray (አዲስ ግንኙነት [ግንኙነቶች.size ()]); }}}

ደንበኛ.ጃቫ

ማስመጣት java.io. IOException; java.net አስመጣ። java.net ማስመጣት /*** ክፍሉ {@code Client} በአውታረ መረብ ውስጥ የደንበኛን የመጨረሻ ነጥብ ይወክላል። {@code Client} ፣ አንዴ ከተወሰነ * አገልጋይ ጋር ከተገናኘ ፣ ከአገልጋዩ ጋር ለመገናኘት ብቻ ዋስትና ተሰጥቶታል። ሌሎች ደንበኞች ውሂቡን ይቀበላሉ ወይም አይቀበሉ * በአገልጋዩ ትግበራ ላይ የተመሠረተ ነው። *

* ይህ ክፍል ደህንነቱ የተጠበቀ ነው። * * @version 1.0 * @አገልጋይ ይመልከቱ * @see Connection */ public class Client {የግል ግንኙነት ግንኙነት ፤ /*** በተጠቀሰው አስተናጋጅ እና ወደብ ላይ ከአገልጋዩ ጋር የተገናኘ {@code Client} ይገነባል። * * @param አስተናጋጅ የአስተናጋጅ አድራሻ ለማሰር። * @param ወደብ ቁጥር ለማሰር። * @throws NetworkException አገልጋይ ሲጀምሩ ስህተት ከተከሰተ። */ የህዝብ ደንበኛ (ሕብረቁምፊ አስተናጋጅ ፣ int ወደብ) NetworkException ን ይጥላል {ይሞክሩ {ግንኙነት = አዲስ ግንኙነት (አዲስ ሶኬት (አስተናጋጅ ፣ ወደብ)) ፤ } መያዝ (UnknownHostException e) {አዲስ NetworkException ን ይጥሉ (“የአስተናጋጅ ስም ሊፈታ አልቻለም” + አስተናጋጅ ፣ ሠ); } መያዝ (ህገወጥ አከራካሪ ፅንሰ -ሀሳብ ሠ) {አዲስ NetworkException ን ይጥሉ (“የወደብ ቁጥር ከ 0 እስከ 65535 (ያካተተ) መካከል መሆን አለበት” + ወደብ) ፤ } መያዝ (IOException e) {አዲስ NetworkException ን ይጥሉ (“አገልጋይ መጀመር አልተቻለም” ፣ ሠ) ፤ }} /*** ውሂብ ለሌላኛው ወገን ይልካል። * * @param ውሂብ ለመላክ ውሂብ። * @throws NetworkException ወደ ዥረት ፍሰት መጻፍ ካልተሳካ። * @throws IllegalStateException ግንኙነት በሚዘጋበት ጊዜ ውሂብ የመጻፍ ሙከራ ከተደረገ። * @ይወርዳል ሕገ -ወጥ ክርክር። ለመላክ ውሂብ ከንቱ ከሆነ። * @throws UnsupportedOperationException የማይደገፍ የውሂብ አይነት ለመላክ ከተሞከረ። */ የህዝብ ባዶነት መላክ (የነገር ውሂብ) የ NetworkException ን ይጥላል {connection.send (ውሂብ) ፤ } /*** የግንኙነት ግንኙነት መልእክት ከአገልጋዩ ጋር ይልካል እና ይዘጋል። */ የህዝብ ባዶ ቅርብ () NetworkException ን ይጥላል {connection.close (); } /*** ደንበኛው ከአገልጋዩ ጋር መገናኘቱን ወይም አለመገናኘቱን ይመልሳል። * * @ደንበኛ ከተገናኘ እውነት ይመለሱ። ውሸት ፣ አለበለዚያ። */ የህዝብ ቡሊያን isOnline () {የመመለሻ ግንኙነት። isconnected (); } /*** የደንበኛውን {@link Connection} ምሳሌ ይመልሳል። */ public Connection getConnection () {return connection; }}

Connection.java

java.io. DataInputStream ን ያስመጡ; ማስመጣት java.io. DataOutputStream; ማስመጣት java.io. IOException; java.net አስመጣ። java.net አስመጣ. SocketException; /** * ክፍሉ {@code Connection} ወይ ከአገልጋይ ወደ ደንበኛ ወይም በኔትወርክ ውስጥ ያለ የደንበኛ መጨረሻ ነጥብን ይወክላል * {@code Connection} ፣ አንዴ ከተገናኘ በኋላ ፣ ከሌላ ፓርቲ ወይም ፓርቲዎች ጋር መረጃን መለዋወጥ ይችላል ፣ በአገልጋይ * ትግበራ ላይ። *

* ይህ ክፍል ደህንነቱ የተጠበቀ ነው። * * @version 1.0 * @see Server * @see Client */ public class Connection Runnable ን ተግባራዊ ያደርጋል {የግል ሶኬት ሶኬት ፤ የግል DataOutputStream መውጣት; የግል DataInputStream ውስጥ ፤ የግል ክር ክር; የግል የመጨረሻ ነገር writeLock = አዲስ ነገር (); የግል የመጨረሻ ነገር readLock = አዲስ ነገር (); /*** የአንድ የተወሰነ {@link Socket} ዥረቶችን በመጠቀም {@code Connection} ን ይገነባል። * * @param ሶኬት ዥረቶችን ከ.*/ የህዝብ ግንኙነት (ሶኬት ሶኬት) የ NetworkException ን ይጥላል {ከሆነ (ሶኬት == ባዶ) {አዲስ ህገወጥ አከራካሪ ፅንሰ -ሀሳብ (“ባዶ ሶኬት”) ይጥላል ፤ } this.socket = ሶኬት; ይሞክሩ {out = new DataOutputStream (socket.getOutputStream ()); } ይያዙ (IOException e) {አዲስ NetworkException ን ይጥሉ (“የውጤት ዥረት መድረስ አልተቻለም” ፣ ሠ) ፤ } ይሞክሩ {in = new DataInputStream (socket.getInputStream ()); } ይያዙ (IOException e) {አዲስ NetworkException ን ይጥሉ (“የግቤት ዥረት መድረስ አልተቻለም” ፣ ሠ) ፤ } ክር = አዲስ ክር (ይህ); thread.start (); } /*** ከሌላኛው ወገን ጋር ያለው ግንኙነት በሕይወት እያለ መልዕክቶችን ያነባል። */ @Override public void run () {while (! Socket.isClosed ()) {ይሞክሩ {int identifier; ባይት ባይት; የተመሳሰለ (readLock) {identifier = in.readInt (); int ርዝመት = in.readInt (); ከሆነ (ርዝመት> 0) {ባይቶች = አዲስ ባይት [ርዝመት]; in.readFully (ባይት ፣ 0 ፣ ባይቶች ርዝመት); } ሌላ {ይቀጥሉ; }} መቀየሪያ (ለifier) {የጉዳይ መለያ. የውስጥ: የገመድ ትዕዛዝ = አዲስ ሕብረቁምፊ (ባይት) ፤ ከሆነ (command.equals ("ግንኙነት ያቋርጡ")) {{ከሆነ (! socket.isClosed ()) {System.out.println ('' የግንኙነት ፓኬት ደርሷል '') ፤ ሞክር {ዝጋ (); } መያዝ (NetworkException e) {መመለስ; }}} መሰበር; የጉዳይ መለያ። ሰበር; ነባሪ: System.out.println ("ያልታወቀ ውሂብ ደርሷል"); }} መያዝ (SocketException e) {ከሆነ (! e.getMessage ()። እኩል (“ሶኬት ተዘግቷል”)) {e.printStackTrace (); }} መያዝ (IOException e) {e.printStackTrace (); }}} /*** ውሂብ ለሌላኛው ወገን ይልካል። * * @param ውሂብ ለመላክ ውሂብ። * @throws NetworkException ወደ ዥረት ፍሰት መጻፍ ካልተሳካ። * @throws IllegalStateException ግንኙነት በሚዘጋበት ጊዜ ውሂብ የመጻፍ ሙከራ ከተደረገ። * @ይወርዳል ሕገ -ወጥ ክርክር። ለመላክ ውሂብ ከንቱ ከሆነ። * @throws UnsupportedOperationException የማይደገፍ የውሂብ አይነት ለመላክ ከተሞከረ። */ የህዝብ ባዶነት መላክ (የነገር ውሂብ) የ NetworkException ን ይጥላል {ከሆነ (socket.isClosed ()) {አዲስ ህገወጥStateException ን ይጥላል (“ውሂብ አልተላከም ፣ ግንኙነቱ ተዘግቷል”) ፤ } ከሆነ (ውሂብ == ባዶ) {አዲስ ህገወጥ አከራካሪ ፅንሰ -ሀሳብ (“ባዶ መረጃ”) ይጥሉ ፤ } ውስጣዊ መለያ; ባይት ባይት; ከሆነ (የመረጃ ምሳሌ ሕብረቁምፊ) {identifier = Identifier. TEXT; ባይት = ((ሕብረቁምፊ) ውሂብ).getBytes (); } ሌላ {አዲስ የማይደገፍ ኦፕሬሽንን (“የማይደገፍ የውሂብ ዓይነት ፦” + data.getClass ()) መጣል ፤ } ይሞክሩ {የተመሳሰለ (writeLock) {out.writeInt (ለifier); out.writeInt (bytes.length); ውጭ። ይፃፉ (ባይት); መውጫ (); } ያዙ (IOException e) {አዲስ NetworkException ን ይጥሉ (“ውሂብ መላክ አልተቻለም” ፣ ሠ) ፤ }} /*** የግንኙነት ግንኙነት መልእክት ይልካል ፣ እና ከሌላው ወገን ጋር ግንኙነትን ይዘጋል። */ የህዝብ ባዶነት ቅርብ () NetworkException ን ይጥላል {ከሆነ (socket.isClosed ()) {አዲስ ህገወጥStateException ን ይጥላል (“ግንኙነቱ ቀድሞውኑ ተዘግቷል”) ፤ } ይሞክሩ {byte message = "disconnect".getBytes (); የተመሳሰለ (writeLock) {out.writeInt (Identifier. INTERNAL); out.writeInt (መልእክት። ርዝመት); ውጭ። ይፃፉ (መልእክት); መውጣት። () }} መያዝ (IOException e) {System.out.println (“የግንኙነት ግንኙነት መልእክት መላክ አልተቻለም”) ፤ } ይሞክሩ {የተመሳሰለ (writeLock) {out.close (); }} ይያዙ (IOException e) {አዲስ NetworkException ን ይጥሉ (“ግንኙነት ሲዘጋ ስህተት” ፣ ሠ) ፤ } በመጨረሻ {thread.interrupt (); }} /*** ከሌላው ወገን ጋር ያለው ግንኙነት ሕያው ይሁን አይሁን ይመልሳል። * * @ግንኙነቱ ሕያው ከሆነ እውነት ይመለሱ። ውሸት ፣ አለበለዚያ። */ የህዝብ ቡሊያን ተገናኝቷል () {ተመለስ! socket.is ዝግ (); }}

መለያ.ጃቫ

/** * ክፍሉ {@code Identifier} በአውታረ መረቡ ላይ የተላከውን ውሂብ * ለማደራጀት እና ለማሳወቅ በ {@link Connection} የሚጠቀሙባቸውን ቋሚዎች ይ containsል። * * @version 1.0 * @see Connection * / public final class Identifier { / ** * Identifier for internal messages. */ የሕዝብ የማይንቀሳቀስ የመጨረሻ int INTERNAL = 1; /*** ለጽሑፍ መልእክቶች መለያ። */ የህዝብ የማይንቀሳቀስ የመጨረሻ int TEXT = 2; }

NetworkException.java

/*** ክፍሉ {@code NetworkException} ከአውታረ መረብ ጋር የተዛመደ ስህተት ያመለክታል። * / public class NetworkException ልዩነትን ያሰፋዋል { / *** እንደ መልዕክቱ {@code null} ያለው {@code NetworkException} ን ይገነባል። * / public NetworkException () {} / *** ከተገለጸው መልዕክት ጋር {@code NetworkException} ን ይገነባል። * * @param መልእክት ስህተትን የሚገልጽ መልእክት። */ የወል አውታረ መረብ ማስወገጃ (ሕብረቁምፊ መልእክት) {ሱፐር (መልእክት); } /*** ከተጠቀሰው መልእክት እና ምክንያት ጋር {@code NetworkException} ይገነባል። * * @param መልእክት ስህተትን የሚገልጽ መልእክት። * @param የስህተት መንስኤ። */ ይፋዊ አውታረ መረብ ኤክሴሽን (ሕብረቁምፊ መልእክት ፣ ሊጣል የሚችል ምክንያት) {ሱፐር (መልእክት ፣ ምክንያት) ፤ } /*** በተጠቀሰው ምክንያት {@code NetworkException} ይገነባል። * * @param የስህተት መንስኤ። */ ይፋዊ አውታረ መረብ ማስወገጃ (ሊጣል የሚችል ምክንያት) {ሱፐር (ምክንያት) ፤ }}

የአጠቃቀም ምሳሌ ።ጃቫ

/*** ክፍሉ {@code UsageExample} የ {@link Server} እና {@link Client} ን አጠቃቀም ያሳያል። በፍጥነት መጀመር እና መዝጋት አንዳንድ * ክፍሎች እንዳይፈጸሙ ስለሚያደርግ እነዚህ ምሳሌዎች እያንዳንዱ ክፍል መፈጸሙን ለማረጋገጥ * {@link Thread#sleep (long)} ን ይጠቀማል። ** int ወደብ = 10430; የአገልጋይ አገልጋይ = አዲስ አገልጋይ (አስተናጋጅ ፣ ወደብ); የደንበኛ ደንበኛ = አዲስ ደንበኛ (አስተናጋጅ ፣ ወደብ); ክር። እንቅልፍ (100 ሊ); client.send ("ጤና ይስጥልኝ"); የአገልጋይ.ብሮድካስት (“ሄይ ፣ ፌላ!”); ክር። እንቅልፍ (100 ሊ); server.disconnect (server.getConnections () [0]); // ወይም client.close () ከደንበኛ-ጎን አገልጋይ ለማላቀቅ (መዝጋት) (); }}

የሚመከር: