Тодорхой төхөөрөмж дээр ажилладаг код бичих нь маш сэтгэл ханамжтай байдаг. Гэхдээ бие биетэйгээ харилцдаг хэд хэдэн төхөөрөмж дээр ажилладаг код бичих нь амьдралыг баталгаажуулдаг. Энэ нийтлэл нь дамжуулах хяналтын протокол (TCP) ашиглан сүлжээгээр хэрхэн холбогдох, мессеж солилцох талаар танд заах болно.
Энэ нийтлэлд та өөрийн компьютерийг өөртөө холбож, үндсэндээ галзуурах програмыг өөрөө тохируулах болно. Та Java дээр сүлжээнд хамгийн өргөн хэрэглэгддэг хоёр урсгалын хоорондох ялгаа, хэрхэн ажилладаг талаар мэдэх болно.
Өгөгдөл ба объектын урсгал
Код руу шумбахаас өмнө нийтлэлд ашигласан хоёр урсгалын ялгааг ялгах хэрэгтэй.
Өгөгдлийн урсгал
Мэдээллийн урсгал нь анхны өгөгдлийн төрөл, мөрийг боловсруулдаг. Мэдээллийн урсгалаар дамжуулж буй өгөгдлийг гараар сериалжуулж, цуцлах шаардлагатай бөгөөд энэ нь нарийн төвөгтэй өгөгдөл дамжуулахад хүндрэл учруулдаг. Гэхдээ өгөгдлийн урсгал нь Java -аас бусад хэл дээр бичигдсэн серверүүд болон үйлчлүүлэгчидтэй харилцах боломжтой. Түүхий дамжуулалт нь өгөгдлийн урсгалтай ижил төстэй боловч өгөгдлийн урсгал нь өгөгдлийг платформоос хараат бус хэлбэрээр форматлах боломжийг олгодог бөгөөд энэ нь хоёулаа илгээсэн өгөгдлийг унших боломжтой байдаг.
Объектын урсгал
Объектын урсгал нь өгөгдлийн анхны төрөл, хэрэгжүүлж буй объектуудыг боловсруулдаг
Цуврал болгох боломжтой
интерфэйс. Объектын урсгалаар дамжуулж буй өгөгдлийг автоматаар сериалжуулж, цуцалдаг бөгөөд энэ нь нарийн төвөгтэй өгөгдөл дамжуулахад хялбар болгодог. Гэхдээ объектын урсгал нь зөвхөн Java дээр бичигдсэн серверүүд болон үйлчлүүлэгчидтэй харилцах боломжтой. Мөн,
ObjectOutputStream
эхлүүлсний дараа толгой руу толгой руу илгээдэг
InputStream
эхлүүлэх үед толгойг хүлээн авах хүртэл гүйцэтгэлийг хориглодог нөгөө талын.
Алхам
Алхам 1. Анги үүсгэнэ үү
Анги үүсгээд хүссэнээрээ нэрлээрэй. Энэ нийтлэлд үүнийг нэрлэх болно
NetworkAppExample
нийтийн ангийн NetworkAppExample {}
Алхам 2. Үндсэн аргыг бий болгох
Үндсэн аргыг үүсгэж, үл хамаарах зүйлүүд гарч болзошгүй гэж мэдэгдээрэй
Үл хамаарах зүйл
төрөл ба түүний ямар ч дэд анги - бүх үл хамаарах зүйлүүд. Энэ нь муу практик гэж тооцогддог боловч нүцгэн ясны жишээн дээр хүлээн зөвшөөрөгддөг.
public class NetworkAppExample {public static void main (String args) онцгой тохиолдлуудыг шиддэг {}}
Алхам 3. Серверийн хаягийг тунхаглах
Энэ жишээнд локал хост хаяг болон дурын портын дугаарыг ашиглах болно. Порт дугаар 0 -ээс 65535 хүртэл байх ёстой. Гэсэн хэдий ч зайлсхийх ёстой портын дугаарууд нь 0 -ээс 1023 (хамааруулсан) хооронд хэлбэлздэг, учир нь тэдгээр нь системийн портууд юм.
public class NetworkAppExample {public static void main (String args) шидэлтүүд Exception {String host = "localhost"; int порт = 10430; }}
Алхам 4. Сервер үүсгэх
Сервер нь хаяг, порт руу холбогдсон бөгөөд ирж буй холболтуудыг сонсдог. Java дээр,
ServerSocket
нь сервер талын төгсгөлийн цэгийг илэрхийлдэг бөгөөд түүний үүрэг бол шинэ холболтыг хүлээн авах явдал юм.
ServerSocket
сервер болон үйлчлүүлэгчийн хоорондох холболтыг илэрхийлдэггүй тул өгөгдлийг унших, илгээх урсгал байдаггүй.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; public class NetworkAppExample {public static void main (String args) шидэлтүүд Exception {String host = "localhost"; int порт = 10430; ServerSocket сервер = шинэ ServerSocket (порт, 50, InetAddress.getByName (хост)); }}
Алхам 5. Бүртгэлийн серверийн эхлэл
Бүртгэлийн зорилгоор серверийг эхлүүлсэн консол дээр хэвлэ.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; public class NetworkAppExample {public static void main (String args) шидэлтүүд Exception {String host = "localhost"; int порт = 10430; ServerSocket сервер = шинэ ServerSocket (порт, 50, InetAddress.getByName (хост)); System.out.println ("Серверийг эхлүүлсэн."); }}
Алхам 6. Үйлчлүүлэгч бий болгох
Үйлчлүүлэгч нь серверийн хаяг, порт руу холбогдсон бөгөөд холболт хийгдсэний дараа пакет (мессеж) -ийг сонсдог. Java дээр,
Сокет
нь серверт холбогдсон клиент талын төгсгөлийн цэг эсвэл үйлчлүүлэгчтэй (серверээс) холболтыг илэрхийлдэг бөгөөд нөгөө талаас талтай харилцахад ашиглагддаг.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class NetworkAppExample {public static void main (String args) шидэлтүүд Exception {String host = "localhost"; int порт = 10430; ServerSocket сервер = шинэ ServerSocket (порт, 50, InetAddress.getByName (хост)); System.out.println ("Серверийг эхлүүлсэн."); Сокет үйлчлүүлэгч = шинэ сокет (хост, порт); }}
Алхам 7. Бүртгэлд холбогдох оролдлого
Бүртгэлийн зорилгоор холболт хийхийг оролдсон тухай консол дээр хэвлэ.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class NetworkAppExample {public static void main (String args) шидэлтүүд Exception {String host = "localhost"; int порт = 10430; ServerSocket сервер = шинэ ServerSocket (порт, 50, InetAddress.getByName (хост)); System.out.println ("Серверийг эхлүүлсэн."); Сокет үйлчлүүлэгч = шинэ сокет (хост, порт); System.out.println ("Сервертэй холбогдож байна …"); }}
Алхам 8. Холбоо тогтоох
Серверийг сонсож, хүлээж авахгүй, өөрөөр хэлбэл холболт тогтоохгүй бол үйлчлүүлэгчид хэзээ ч холбогдохгүй. Java дээр холболтыг ашиглан хийдэг
хүлээн зөвшөөрөх ()
-ийн арга
ServerSocket
анги. Энэ арга нь үйлчлүүлэгч холбогдох хүртэл гүйцэтгэлийг хаах болно.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 (); }}
Алхам 9. Тогтсон холболтыг бүртгэх
Бүртгэлийн зорилгоор сервер ба үйлчлүүлэгч хоёрын хооронд холбоо тогтоосон тухай консол дээр хэвлэ.
java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Холболт тогтоогдсон."); }}
Алхам 10. Харилцааны урсгалыг бэлтгэ
Харилцаа холбоо нь дамжуулалтаар хийгддэг бөгөөд энэ аппликешнд сервер (үйлчлүүлэгчээс) болон үйлчлүүлэгчийн түүхий дамжуулалтыг өгөгдөл эсвэл объектын урсгалд гинжлэх шаардлагатай байдаг. Хоёр тал хоёулаа ижил төрлийн урсгалыг ашиглах ёстой гэдгийг санаарай.
-
Өгөгдлийн урсгал
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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. Socket импортлох; public class 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 ()); }}
Дээрх кодод заасан дарааллыг санах нь илүү хялбар байж магадгүй - эхлээд гаралтын урсгалыг эхлүүлж, дараа нь оролтын урсгалыг ижил дарааллаар эхлүүлнэ үү. Гэсэн хэдий ч объектын урсгалыг эхлүүлэх өөр нэг захиалга нь дараах байдалтай байна.
ObjectOutputStream clientOut = шинэ ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = шинэ ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = шинэ ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = шинэ ObjectInputStream (client.getInputStream ());
Алхам 11. Харилцаа холбоо бэлэн болсныг тэмдэглэ
Бүртгэлийн зорилгоор харилцаа холбоо бэлэн байгаа эсэхийг консол дээр хэвлэ.
// java.net. InetAddress импортыг оруулаагүй болно; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); }}
Алхам 12. Зурвас үүсгэх
Энэхүү програмд,
Сайн уу Дэлхий
текстийг сервер рүү илгээнэ
байт
эсвэл
Мөр
. Ашиглаж буй урсгалаас хамаарах төрлийн хувьсагчийг зарлах. Хэрэглэх
байт
мэдээллийн урсгалын хувьд болон
Мөр
объектын урсгалын хувьд.
-
Өгөгдлийн урсгал
Өгөгдлийн урсгалыг ашиглан сериалжуулалтыг объектуудыг энгийн өгөгдлийн төрөл болгон хувиргах замаар хийдэг
Мөр
. Энэ тохиолдолд,
Мөр
руу хөрвүүлэгддэг
байт
ашиглан бичихийн оронд
writeBytes ()
Үүнийг зураг эсвэл бусад файл гэх мэт бусад объектуудаар хэрхэн яаж хийхийг харуулах арга.
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); String messageOut = "Сайн уу ертөнц"; }}
Алхам 13. Зурвас илгээх
Өгөгдлийг бүхэлд нь бичсэн эсэхийг шалгахын тулд гаралтын урсгал руу өгөгдөл бичиж, урсгалыг угаана уу.
-
Өгөгдлийн урсгал
Мессежийн уртыг эхлээд илгээх шаардлагатай бөгөөд нөгөө тал нь хичнээн байт унших шаардлагатайг мэддэг. Уртыг энгийн бүхэл тоо болгон илгээсэний дараа байт илгээж болно.
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 (); }}
-
Объектын урсгал
java.io. ObjectInputStream импортлох; java.io. ObjectOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); String messageOut = "Сайн уу ертөнц"; clientOut.writeObject (messageOut); clientOut.flush (); }}
Алхам 14. Илгээсэн мессежийг бүртгэх
Бүртгэлийн зорилгоор мессеж илгээгдсэнийг консол дээр хэвлэ.
-
Өгөгдлийн урсгал
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Сервер рүү илгээсэн мессеж:" + шинэ String (messageOut)); }}
-
Объектын урсгал
java.io. ObjectInputStream импортлох; java.io. ObjectOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); String messageOut = "Сайн уу ертөнц"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Сервер рүү илгээсэн мессеж:" + messageOut); }}
Алхам 15. Зурвасыг уншина уу
Оруулсан урсгалаас өгөгдлийг уншиж хөрвүүлэх. Бид илгээсэн өгөгдлийн төрлийг яг таг мэддэг тул бид a үүсгэх болно
Мөр
-аас
байт
эсвэл жүжигчид
Обьект
руу
Мөр
ашиглаж байгаа урсгалаас хамааран шалгахгүйгээр.
-
Өгөгдлийн урсгал
Уртыг эхлээд, дараа нь байтыг илгээсэн тул унших ажлыг ижил дарааллаар хийх ёстой. Хэрэв урт нь тэг бол унших зүйл байхгүй болно. Байтуудыг буцааж жишээ болгон хөрвүүлэх тохиолдолд объектыг цуцална
Мөр
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Сервер рүү илгээсэн мессеж:" + шинэ String (messageOut)); int урт = serverIn.readInt (); if (урт> 0) {байт messageIn = шинэ байт [урт]; serverIn.readFully (messageIn, 0, messageIn.length); }}}
-
Объектын урсгал
java.io. ObjectInputStream импортлох; java.io. ObjectOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); String messageOut = "Сайн уу ертөнц"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Сервер рүү илгээсэн мессеж:" + messageOut); String messageIn = (String) serverIn.readObject (); }}
Алхам 16. Бичсэн мессеж
Бүртгэлийн зорилгоор мессеж хүлээн авсан консол дээр хэвлээд түүний агуулгыг хэвлэ.
-
Өгөгдлийн урсгал
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Сервер рүү илгээсэн мессеж:" + шинэ String (messageOut)); int урт = serverIn.readInt (); if (урт> 0) {байт messageIn = шинэ байт [урт]; serverIn.readFully (messageIn, 0, messageIn.length); System.out.println ("Үйлчлүүлэгчээс ирсэн мессеж:" + шинэ String (messageIn)); }}}
-
Объектын урсгал
java.io. ObjectInputStream импортлох; java.io. ObjectOutputStream импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Харилцаа холбоо бэлэн байна."); String messageOut = "Сайн уу ертөнц"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("Сервер рүү илгээсэн мессеж:" + messageOut); String messageIn = (String) serverIn.readObject (); System.out.println ("Үйлчлүүлэгчээс ирсэн мессеж:" + messageIn); }}
Алхам 17. Холболтыг салга
Нэг тал дамжуулалтаа хааснаар холболт тасардаг. Java дээр гаралтын урсгалыг хааснаар холбогдох сокет ба оролтын урсгал хаагдах болно. Нөгөө талаас талууд холболт тасарсныг олж мэдээд санах ой алдагдахаас урьдчилан сэргийлэхийн тулд гаралтын урсгалыг хаах хэрэгтэй.
// java.net. InetAddress импортыг оруулаагүй болно; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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. Бүртгэлийг таслах
Бүртгэлийн зорилгоор консол руу хэвлэх холболтыг салгасан байна.
// java.net. InetAddress импортыг оруулаагүй болно; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Холболтууд хаагдсан."); }}
Алхам 19. Серверийг цуцлах
Холболт тасарсан боловч сервер асаалттай хэвээр байна. Шиг
ServerSocket
нь ямар ч урсгалтай холбоогүй тул дуудлага хийх замаар үүнийг тодорхой хаах шаардлагатай
ойрхон ()
арга.
// java.net. InetAddress импортыг оруулаагүй болно; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 (); }}
Алхам 20. Лог серверийг цуцлах
Бүртгэлийн зорилгоор консол сервер рүү хэвлэх ажлыг зогсоосон.
// java.net. InetAddress импортыг оруулаагүй болно; java.net. ServerSocket импортлох; java.net. Socket импортлох; public class 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 ("Сервер дууссан."); }}
Алхам 21. Эмхэтгэж ажиллуулна уу
Бүртгэл нь програм амжилттай болсон эсэхийг олж мэдэх боломжийг бидэнд олгосон. Хүлээгдэж буй гаралт:
Сервер эхлэв. Сервертэй холбогдож байна … Холболт үүслээ. Харилцаа холбоо бэлэн байна. Сервер рүү илгээсэн мессеж: Сайн байна уу Дэлхийн үйлчлүүлэгчээс ирсэн мессеж: Hello World Connections хаалттай байна. Серверийг хаасан.
Хэрэв таны гаралт дээр дурдсантай адил биш бол магадлал багатай бол хэд хэдэн шийдэл байна.
-
Хэрэв гаралт шугам дээр зогсвол
Холболт тогтоосон.
болон объектын урсгалыг ашигладаг бөгөөд тус бүрийг угаана
ObjectOutputStream
- зарим шалтгаанаар толгой илгээгээгүй тул эхлүүлсний дараа.
-
Хэрэв гаралт хэвлэгдэх юм бол
java.net. BindException: Хаяг аль хэдийн ашиглагдаж байна
- заасан портыг аль хэдийн ашигласан тул өөр порт дугаар сонгоно уу.
Зөвлөмж
- Өөр сүлжээнд байгаа сервертэй холбогдох нь дамжуулагдсан порт бүхий серверийг ажиллуулж буй төхөөрөмжийн гадаад IP хаяг руу холбогдох замаар хийгддэг.
- Нэг сүлжээнд байгаа сервертэй холбогдох нь сервер ажиллуулж буй төхөөрөмжийн хувийн IP хаяг руу холбогдох эсвэл порт дамжуулах, төхөөрөмжийн гадаад IP хаяг руу холбогдох замаар хийгддэг.
- Порт дамжуулахгүйгээр өөр сүлжээнд сервер рүү холбогдох боломжийг олгодог Hamachi гэх мэт програм хангамж байдаг боловч энэ програмыг хоёр төхөөрөмж дээр суулгахыг шаарддаг.
Жишээ
Блоклох оролт/гаралтыг ашигладаг сүлжээний програмууд урсгал ашиглах шаардлагатай. Дараах жишээнүүд нь урсгалтай минималист сервер ба үйлчлүүлэгчийн хэрэгжилтийг харуулж байна. Сүлжээний код нь үндсэн нийтлэлтэй адилхан бөгөөд зарим хэсгийг синхрончилж, урсгал руу шилжүүлж, үл хамаарах зүйлийг зохицуулдаг.
Server.java
java.io. IOException импортлох; java.net. InetAddress импортлох; java.net. ServerSocket импортлох; java.net. SocketException импортлох; java.net. UnknownHostException импортлох; java.util. ArrayList импортлох; java.util. Collections импортлох; java.util. List импортлох; /*** {@кодын сервер} анги нь сүлжээний серверийн төгсгөлийн цэгийг илэрхийлдэг. {@code Server} нь тодорхой IP * хаяг, порт руу холбогдсоны дараа үйлчлүүлэгчидтэй холбоо тогтоож, тэдэнтэй харилцах эсвэл салгах боломжтой болно. *
* Энэ анги нь аюулгүй юм. * * @version 1.0 * @Client харах * @see Connection */ public class Server нь Runnable {private ServerSocket server -ийг хэрэгжүүлдэг; хувийн жагсаалт
холболтууд; хувийн урсгалтай утас; хувийн эцсийн Объектын холболтуудLock = new Object (); /** * Ирж буй үйлчлүүлэгчдийн дарааллын хамгийн дээд уртыг заасан хост нэр болон порт дээр үйлчлүүлэгчидтэй харилцдаг {@кодын сервер} байгуулна. * * @param хост Ашиглах хостын хаяг. * @param порт Ашиглах портын дугаар. * @param backlog Ирж буй үйлчлүүлэгчдийн дарааллын хамгийн их уртыг хүссэн. * @thows NetworkException Хэрэв сервер эхлүүлэх явцад алдаа гарвал. */ нийтийн сервер (String host, int port, int backlog) нь NetworkException хаядаг {try {server = new ServerSocket (port, backlog, InetAddress.getByName (host))); } catch (UnknownHostException e) {new NetworkException хаях ("Хостын нэрийг шийдэж чадсангүй:" + хост, e); } catch (IllegalArgumentException e) {new NetworkException хаях ("Порт дугаар нь 0-65535 (хамааруулсан) хооронд байх шаардлагатай:" + порт); } catch (IOException e) {new NetworkException хаях ("Серверийг эхлүүлж чадсангүй.", e); } холболтууд = Collections.synchronizedList (шинэ ArrayList ()); thread = шинэ Thread (энэ); thread.start (); } /*** Заасан хостын нэр болон порт дээр үйлчлүүлэгчидтэй харилцдаг {@кодын сервер} байгуулна. * * @param хост Холбогдох хост хаяг. * @param порт Холбох портын дугаар. * @Server хаягийг шиддэг Хэрэв сервер эхлүүлэх явцад алдаа гардаг. */ нийтийн сервер (String host, int port) нь NetworkException хаядаг {энэ (хост, порт, 50); } /*** Үйлчлүүлэгчдээс ирж буй холболтыг сонсож, хүлээн авч, бүртгэдэг. */ @Override public void run () {while (! Server.isClosed ()) {try {connections.add (new Connection (server.accept ()))); } барих (SocketException e) {if (! e.getMessage (). тэнцүү ("Socket хаалттай")) {e.printStackTrace (); }} барих (NetworkException | IOException e) {e.printStackTrace (); }}} /*** Бүртгэгдсэн бүх үйлчлүүлэгчдэд өгөгдөл илгээдэг. * * @param data Илгээх өгөгдөл. * @хууль бусStateException хаядаг Хэрэв сервер офлайн байх үед өгөгдөл бичихийг оролддог. * @IllegalArgumentException хаядаг Хэрэв илгээх өгөгдөл нь хоосон байвал. */ нийтийн хүчин төгөлдөр бус нэвтрүүлэг (Объектын өгөгдөл) {if (server.isClosed ()) {new IllegalStateException хаях ("Өгөгдөл илгээгээгүй, сервер офлайн байна."); } if (data == null) {new IllegalArgumentException хаях ("null data"); } synchronized (ConnectionsLock) {for (Холболтын холболт: холболтууд) {оролдох {connection.send (data); System.out.println ("Өгөгдлийг үйлчлүүлэгчид амжилттай илгээсэн."); } барих (NetworkException e) {e.printStackTrace (); }}}} /*** Таслах тухай мессеж илгээж, заасан үйлчлүүлэгчийг салгана. * * @param холболт Үйлчлүүлэгчийг салгах. * @thows NetworkException Хэрэв холболтыг хааж байхад алдаа гарвал. */ public void disconnect (Connection connection) нь NetworkException хаядаг {if (холболтуудыг устгах (холболт)) {connection.close (); }} /*** Бүх үйлчлүүлэгчдэд холболтыг таслах тухай мессеж илгээж, тэдгээрийг салгаж серверийг зогсооно. */ public void close () нь NetworkException {synchronized (ConnectionsLock) {for (Connection connection: connection) {try {connection.close (); } барих (NetworkException e) {e.printStackTrace (); }}} холболтууд.clear (); {server.close () оролдоно уу; } catch (IOException e) {new NetworkException хаях ("Серверийг хааж байхад гарсан алдаа."); } эцэст нь {thread.interrupt (); }} /*** Сервер онлайн байгаа эсэхийг буцаана. * * Хэрэв сервер онлайн байгаа бол @буцах Үнэн. Худлаа, тэгэхгүй бол. */ public boolean isOnline () {return! server.isClosed (); } /*** Бүртгэгдсэн үйлчлүүлэгчдийн массивыг буцаана. */ public Connection getConnections () {synchronized (connectionsLock) {буцах холбоосууд.toArray (шинэ Холболт [холболтууд.size ()])); }}}
Client.java
java.io. IOException импортлох; java.net. Socket импортлох; java.net. UnknownHostException импортлох; /*** {@code Client} анги нь сүлжээнд байгаа үйлчлүүлэгчийн төгсгөлийн цэгийг илэрхийлдэг. Тодорхой * серверт холбогдсон {@code Client} нь зөвхөн сервертэй харилцах боломжтой болно. Бусад үйлчлүүлэгчид өгөгдөл хүлээн авах эсэх * нь серверийн хэрэгжилтээс хамаарна. *
* Энэ анги нь аюулгүй юм. * * @version 1.0 * @Server харах * @Connection харах// public class Client {private Connection connection; /*** Заасан хост болон порт дээрх серверт холбогдсон {@кодын үйлчлүүлэгч} байгуулна. * * @param хост Холбогдох хостын хаяг. * @param порт Холбох портын дугаар. * @thows NetworkException Хэрэв сервер эхлүүлэх явцад алдаа гарвал. */ public Client (String host, int port) нь NetworkException хаядаг {try {connection = new Connection (new Socket (host, port)); } catch (UnknownHostException e) {new NetworkException хаях ("Хостын нэрийг шийдэж чадсангүй:" + хост, e); } catch (IllegalArgumentException e) {new NetworkException хаях ("Порт дугаар нь 0-65535 (хамааруулсан) хооронд байх шаардлагатай:" + порт); } catch (IOException e) {new NetworkException хаях ("Серверийг эхлүүлж чадсангүй.", e); }} /*** Өгөгдлийг нөгөө тал руу илгээдэг. * * @param data Илгээх өгөгдөл. * @thows NetworkException Хэрэв гаралтын урсгал руу бичих амжилтгүй болвол. * @IllegalStateException хаядаг Хэрэв холболт хаагдах үед өгөгдөл бичихийг оролддог. * @IllegalArgumentException хаядаг Хэрэв илгээх өгөгдөл нь хоосон байвал. * @supportedOperationException -ийг дэмждэггүй бол өгөгдлийн төрлийг илгээхийг оролддог. */ public void send (Object data) хаях нь NetworkException {connection.send (data); } /*** Сервер рүү холболтыг таслах тухай мессеж илгээж, холболтыг хаадаг. */ public void close () нь NetworkException {connection.close () хаядаг; } /*** Үйлчлүүлэгч сервертэй холбогдсон эсэхээс үл хамааран буцаана. * * Хэрэв үйлчлүүлэгч холбогдсон бол @буцах Үнэн. Худлаа, тэгэхгүй бол. */ public boolean isOnline () {return connection.isConnected (); } /*** Үйлчлүүлэгчийн {@link Connection} тохиолдлыг буцаана. */ public Connection getConnection () {буцах холболт; }}
Холболт.java
java.io. DataInputStream импортлох; java.io. DataOutputStream импортлох; java.io. IOException импортлох; java.net. Socket импортлох; java.net. SocketException импортлох; /** * Ангилал {@кодын холболт} нь серверээс клиент хүртэлх холболтыг эсвэл сүлжээний үйлчлүүлэгчийн төгсгөлийн цэгийг илэрхийлдэг * {@Code Connection} холбогдсоны дараа бусад тал эсвэл талуудтай мэдээлэл солилцох боломжтой болно. сервер дээр * хэрэгжилт. *
* Энэ анги нь аюулгүй юм. * * @version 1.0 * @серверийг үзэх * @үйлчлүүлэгчийг харах */ public class Connection нь Runnable {private Socket socket; хувийн DataOutputStream гарах; хувийн DataInputStream; хувийн урсгалтай утас; хувийн эцсийн Object writeLock = шинэ Объект (); хувийн эцсийн Объект readLock = шинэ Объект (); /*** Заасан {@link Socket} -н дамжуулалтыг ашиглан {@кодын холболт} -ыг бүтээдэг. * * @param сокет Сокет нь урсгалыг татаж авах боломжтой.*/ public Connection (Socket socket) нь NetworkException хаядаг {if (socket == null) {new IllegalArgumentException ("null socket") хаях); } this.socket = залгуур; {out = new DataOutputStream (socket.getOutputStream ()) -ийг туршиж үзээрэй; } catch (IOException e) {new NetworkException хаях ("Гаралтын урсгалд хандаж чадсангүй.", e); } оролдох {in = шинэ DataInputStream (socket.getInputStream ()); } catch (IOException e) {new NetworkException хаях ("Оролтын урсгалд хандаж чадсангүй.", e); } thread = шинэ Thread (энэ); thread.start (); } /*** Нөгөө талтай холбогдож байх үед мессежийг уншдаг. */ @Override public void run () {while (! Socket.isClosed ()) {try {int identifier; байт байт; синхрончлогдсон (readLock) {танигч = in.readInt (); int урт = in.readInt (); if (урт> 0) {байт = шинэ байт [урт]; in.readFully (байт, 0, байт. урт); } өөр {үргэлжлүүлэх; }} switch (танигч) {case Identifier. INTERNAL: String тушаал = шинэ String (байт); if (command.equals ("disconnect")) {if (! socket.isClosed ()) {System.out.println ("Салгах пакет хүлээн авсан."); оролдох {close (); } барих (NetworkException e) {буцах; }}} завсарлага; case Identifier. TEXT: System.out.println ("Зурвас хүлээн авсан:" + шинэ мөр (байт)); завсарлага; анхдагч: System.out.println ("Танигдаагүй өгөгдлийг хүлээн авсан."); }} барих (SocketException e) {if (! e.getMessage (). тэнцүү ("Socket хаалттай")) {e.printStackTrace (); }} барих (IOException e) {e.printStackTrace (); }}} /*** Өгөгдлийг нөгөө тал руу илгээдэг. * * @param data Илгээх өгөгдөл. * @thows NetworkException Хэрэв гаралтын урсгал руу бичих амжилтгүй болвол. * @IllegalStateException хаядаг Хэрэв холболт хаагдах үед өгөгдөл бичихийг оролддог. * @IllegalArgumentException хаядаг Хэрэв илгээх өгөгдөл нь хоосон байвал. * @supportedOperationException -ийг дэмждэггүй бол өгөгдлийн төрлийг илгээхийг оролддог. */ public void send (Object data) нь NetworkException хаядаг {if (socket.isClosed ()) {new IllegalStateException хаяна ("Өгөгдөл илгээгээгүй, холболт хаагдсан байна"); } if (data == null) {new IllegalArgumentException хаях ("null data"); } int таних тэмдэг; байт байт; if (өгөгдлийн жишээний мөр) {identifier = Identifier. TEXT; байт = ((String) өгөгдөл).getBytes (); } өөр {шидэх шинэ UnsupportedOperationException ("Дэмжигдээгүй өгөгдлийн төрөл:" + data.getClass ()); } оролдох {synchronized (writeLock) {out.writeInt (таних тэмдэг); out.writeInt (байтын урт); out.write (байт); out.flush (); }} catch (IOException e) {new NetworkException хаях ("Өгөгдлийг илгээж чадсангүй.", e); }} /*** Нөгөө тал руугаа холбоо таслах тухай мессеж илгээж, холболтыг хаадаг. */ public void close () хаягаар NetworkException {if (socket.isClosed ()) {new IllegalStateException хаяна ("Холболт аль хэдийн хаагдсан байна."); } оролдох {байт message = "салгах".getBytes (); синхрончлогдсон (writeLock) {out.writeInt (Identifier. INTERNAL); out.writeInt (message.length); out.write (зурвас); out.flush (); }} catch (IOException e) {System.out.println ("Холболтыг таслах мессежийг илгээж чадсангүй."); } оролдох {synchronized (writeLock) {out.close (); }} catch (IOException e) {new NetworkException хаях ("Холболтыг хааж байхад алдаа гарлаа.", e); } эцэст нь {thread.interrupt (); }} /*** Нөгөө талтай холболт амьд байгаа эсэхийг буцаана. * * Хэрэв холболт амьд байвал @буцах нь үнэн болно. Худлаа, тэгэхгүй бол. */ public boolean isConnected () {return! socket.isClosed (); }}
Тодорхойлогч.java
/** * {@Code Identifier} анги нь сүлжээгээр илгээгдсэн өгөгдлийг цуврал болгох, цуцлахад {@link Connection} ашигладаг тогтмолуудыг агуулдаг. * * @version 1.0 * @See Connection * / public final class Identifier { / ** * Дотоод мессежийг таниулагч. */ public static final int INTERNAL = 1; /*** Текст мессежийг таних тэмдэг. */ public static final int TEXT = 2; }
NetworkException.java
/*** {@code NetworkException} анги нь сүлжээтэй холбоотой алдааг илтгэнэ. * / public class NetworkException нь Exception -ийг өргөтгөдөг { / *** {@code null} гэсэн мессеж болгон {@code NetworkException} бүтээдэг. * / public NetworkException () {} / *** Заасан мессежээр {@code NetworkException} бүтээдэг. * * @param message Алдааг тайлбарлах мессеж. */ public NetworkException (String message) {супер (зурвас); } /*** Заасан мессеж болон шалтгааныг агуулсан {@code NetworkException} бүтээдэг. * * @param message Алдааг тайлбарлах мессеж. * @param шалтгаан Алдааны шалтгаан. */ public NetworkException (String message, Throwable шалтгаан) {супер (зурвас, шалтгаан); } /*** Заасан шалтгааны улмаас {@code NetworkException} бүтээдэг. * * @param шалтгаан Алдааны шалтгаан. */ public NetworkException (Throwable шалтгаан) {супер (шалтгаан); }}
Хэрэглээний жишээ.java
/*** {@cod UsageExample} анги нь {@link Server} болон {@link Client} -н хэрэглээг харуулдаг. Энэ жишээн дээр * {@link Thread#sleep (long)} - ийг ашиглан сегмент бүрийг гүйцэтгэхийг баталгаажуулдаг, учир нь хурдан эхлүүлэх, хаах нь зарим * сегментийг ажиллуулахгүй болгодог. * * @version 1.0 * @серверийг үзэх * @үйлчлүүлэгчийг харах */ нийтийн анги UsageExample {public static void main (String args) онцгой тохиолдлуудыг шиддэг {String host = "localhost"; int порт = 10430; Сервер сервер = шинэ сервер (хост, порт); Үйлчлүүлэгч үйлчлүүлэгч = шинэ үйлчлүүлэгч (хост, порт); Thread.sleep (100L); client.send ("Сайн уу."); server.broadcast ("Хөөе, нөхөр!"); Thread.sleep (100L); server.disconnect (server.getConnections () [0]); // эсвэл client.close () клиент талын серверээс салгахын тулд.close (); }}