نحوه ایجاد برنامه شبکه در جاوا (با تصاویر)

فهرست مطالب:

نحوه ایجاد برنامه شبکه در جاوا (با تصاویر)
نحوه ایجاد برنامه شبکه در جاوا (با تصاویر)

تصویری: نحوه ایجاد برنامه شبکه در جاوا (با تصاویر)

تصویری: نحوه ایجاد برنامه شبکه در جاوا (با تصاویر)
تصویری: Different ways of taking screenshots with Samsung A32|راه های مختلف اسکرین شات با سامسونگ آ سی و دو 2024, ممکن است
Anonim

نوشتن کدی که روی دستگاه خاصی اجرا می شود بسیار رضایت بخش است. اما ، نوشتن کدی که روی چندین دستگاه که با یکدیگر ارتباط برقرار می کنند اجرا می شود ، به سادگی تأیید کننده زندگی است. این مقاله نحوه اتصال و تبادل پیام ها از طریق شبکه با استفاده از پروتکل کنترل انتقال (TCP) را به شما آموزش می دهد.

در این مقاله ، برنامه ای را تنظیم می کنید که رایانه شما را به خود متصل کرده و در اصل آن را دیوانه می کند - با خود صحبت کنید. همچنین تفاوت دو جریان پرکاربرد برای شبکه در جاوا و نحوه عملکرد آنها را خواهید آموخت.

جریان داده و شی

قبل از ورود به کد ، تفاوت بین دو جریان مورد استفاده در مقاله باید متمایز شود.

جریان داده ها

جریان داده ها انواع داده ها و رشته ها را پردازش می کند. داده های ارسال شده از طریق جریان داده ها باید به صورت دستی سریال سازی و ضد آب شوند که انتقال داده های پیچیده را دشوار می کند. اما ، جریان داده ها می توانند با سرورها و کلاینت هایی که به زبان های دیگر به غیر از جاوا نوشته شده اند ارتباط برقرار کنند. جریانهای خام از این نظر شبیه جریانهای داده هستند ، اما جریانهای داده اطمینان می دهند که داده ها به صورت مستقل از پلت فرم قالب بندی شده اند که مفید است زیرا هر دو طرف قادر به خواندن داده های ارسال شده خواهند بود.

جریان های شیء

جریان های شیء انواع داده های اولیه و اشیایی را که پیاده سازی می کنند پردازش می کند

قابل سریال سازی

رابط. داده های ارسال شده از طریق جریان های شیء به طور خودکار سریال سازی و از بین می روند و انتقال داده های پیچیده را آسان تر می کند. اما ، جریان های شی فقط می توانند با سرورها و کلاینت های نوشته شده در جاوا ارتباط برقرار کنند. همچنین،

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. ایجاد سرور

سرور به آدرس و پورت متصل است و به اتصالات ورودی گوش می دهد. در جاوا ،

ServerSocket

نشان دهنده نقطه پایانی سمت سرور است و عملکرد آن پذیرش اتصالات جدید است.

ServerSocket

جریان هایی برای خواندن و ارسال داده ها ندارد زیرا ارتباط بین سرور و سرویس گیرنده را نشان نمی دهد.

واردات 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 server = ServerSocket جدید (پورت ، 50 ، InetAddress.getByName (میزبان)) ؛ System.out.println ("سرور راه اندازی شد.") ؛ }}

ایجاد برنامه شبکه در جاوا Step6
ایجاد برنامه شبکه در جاوا Step6

مرحله 6. یک مشتری ایجاد کنید

مشتری به آدرس و پورت سرور متصل است و پس از برقراری اتصال به بسته ها (پیام ها) گوش می دهد. در جاوا ،

سوکت

نشان دهنده نقطه پایانی سمت سرویس گیرنده متصل به سرور یا اتصال (از سرور) به سرویس گیرنده است و برای ارتباط با طرف دیگر در طرف دیگر استفاده می شود.

واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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. Socket؛ کلاس عمومی 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 ("اتصال به سرور …") ؛ }}

ایجاد برنامه شبکه در جاوا Step8
ایجاد برنامه شبکه در جاوا Step8

مرحله 8. ایجاد ارتباط

تا زمانی که سرور ارتباطات را نشنیده و نپذیرد ، به عبارت دیگر ایجاد نمی کند ، مشتریان هرگز متصل نمی شوند. در جاوا ، اتصالات با استفاده از ایجاد می شود

تایید کنید()

روش از

ServerSocket

کلاس این روش تا زمانی که مشتری متصل نشود ، اجرا را مسدود می کند.

واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()؛ }}

ایجاد برنامه شبکه در جاوا Step9
ایجاد برنامه شبکه در جاوا Step9

مرحله 9. اتصال برقرار شده را وارد کنید

برای ورود به سیستم ، روی کنسول چاپ کنید که ارتباط بین سرور و سرویس گیرنده برقرار شده است.

واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("اتصال برقرار شد.")؛ }}

ایجاد برنامه شبکه در جاوا Step10
ایجاد برنامه شبکه در جاوا Step10

مرحله 10. جریانهای ارتباطی را آماده کنید

ارتباط از طریق جریانها انجام می شود و در این برنامه ، جریانهای خام (اتصال از) سرور (به مشتری) و سرویس گیرنده باید به جریانهای داده یا شیء متصل شوند. به یاد داشته باشید ، هر دو طرف باید از نوع جریان یکسان استفاده کنند.

  • جریان داده ها

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()) ؛ }}

  • جریان های شیء

    هنگامی که از چندین جریان شی استفاده می شود ، جریانهای ورودی باید به همان ترتیب جریانهای خروجی راه اندازی شوند زیرا

    ObjectOutputStream

    یک سربرگ برای طرف مقابل ارسال می کند و

    ObjectInputStream

    اجرا را مسدود می کند تا سرصفحه را بخواند.

    واردات java.io. ObjectInputStream ؛ واردات java.io. ObjectOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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. Socket؛ کلاس عمومی NetworkAppExample {public static void main (String args) Exception {String host = "localhost"؛ پورت int = 10430 ؛ ServerSocket server = ServerSocket جدید (پورت ، 50 ، InetAddress.getByName (host)) ؛ System.out.println ("سرور راه اندازی شد.") ؛ مشتری سوکت = سوکت جدید (میزبان ، پورت) ؛ System.out.println ("اتصال به سرور …") ؛ اتصال سوکت = server.accept ()؛ System.out.println ("اتصال برقرار شد.")؛ // کد حذف شده System.out.println ("ارتباط آماده است.") ؛ }}

ایجاد برنامه شبکه در جاوا Step12
ایجاد برنامه شبکه در جاوا Step12

مرحله 12. پیامی ایجاد کنید

در این برنامه ،

سلام دنیا

متن به صورت زیر به سرور ارسال می شود

بایت

یا

رشته

به متغیری از نوع را که به جریان مورد استفاده بستگی دارد ، اعلام کنید. استفاده کنید

بایت

برای جریان داده ها و

رشته

برای جریان های شی

  • جریان داده ها

    با استفاده از جریان داده ها ، سریال سازی با تبدیل اشیاء به انواع داده اولیه یا a انجام می شود

    رشته

    به در این مورد،

    رشته

    تبدیل می شود به

    بایت

    به جای نوشتن با استفاده

    writeBytes ()

    روش برای نشان دادن نحوه انجام آن با اشیاء دیگر ، مانند تصاویر یا فایل های دیگر.

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()؛ }}

  • جریان های شیء

    واردات java.io. ObjectInputStream ؛ واردات java.io. ObjectOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی NetworkAppExample {public static void main (String args) Exception {String host = "localhost"؛ پورت int = 10430؛ ServerSocket server = ServerSocket جدید (پورت ، 50 ، InetAddress.getByName (host)) ؛ 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 = "سلام جهان"؛ }}

ایجاد برنامه شبکه در جاوا Step13
ایجاد برنامه شبکه در جاوا Step13

مرحله 13. پیام را ارسال کنید

داده ها را در جریان خروجی بنویسید و جریان را شستشو دهید تا مطمئن شوید داده ها به طور کامل نوشته شده اند.

  • جریان داده ها

    ابتدا باید طول پیام ارسال شود تا طرف دیگر بداند چند بایت برای خواندن نیاز دارد. پس از ارسال طول به عنوان یک نوع عدد صحیح اولیه ، می توان بایت ها را ارسال کرد.

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی NetworkAppExample {public static void main (String args) Exception {String host = "localhost"؛ پورت int = 10430 ؛ ServerSocket server = ServerSocket جدید (پورت ، 50 ، InetAddress.getByName (host)) ؛ 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؛ کلاس عمومی 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 ("ارتباط آماده است.")؛ String messageOut = "سلام جهان"؛ clientOut.writeObject (messageOut) ؛ clientOut.flush ()؛ }}

ایجاد برنامه شبکه در جاوا Step14
ایجاد برنامه شبکه در جاوا Step14

مرحله 14. پیام ارسال شده را وارد کنید

برای ورود به سیستم ، پیام را که در کنسول ارسال شده است چاپ کنید.

  • جریان داده ها

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()؛ System.out.println ("پیام به سرور ارسال شد:" + رشته جدید (messageOut)) ؛ }}

  • جریان های شیء

    واردات java.io. ObjectInputStream ؛ واردات java.io. ObjectOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("ارتباط آماده است.")؛ String messageOut = "سلام جهان"؛ clientOut.writeObject (messageOut) ؛ clientOut.flush ()؛ System.out.println ("پیام به سرور ارسال شد:" + messageOut)؛ }}

ایجاد برنامه شبکه در جاوا Step15
ایجاد برنامه شبکه در جاوا Step15

مرحله 15. پیام را بخوانید

داده های جریان ورودی را بخوانید و تبدیل کنید. از آنجا که ما دقیقاً نوع داده های ارسال شده را می دانیم ، یا a ایجاد می کنیم

رشته

از جانب

بایت

یا بازیگران

هدف - شی

به

رشته

بسته به جریان مورد استفاده ، بدون بررسی ، بررسی می شود.

  • جریان داده ها

    از آنجا که طول ابتدا ارسال شد و بایت ها پس از آن ، خواندن باید به همان ترتیب انجام شود. در صورت صفر بودن طول ، چیزی برای خواندن وجود ندارد. وقتی بایت ها به نمونه ای تبدیل شوند ، در این مورد ، شیء از حالت طبیعی خارج می شود

    رشته

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()؛ System.out.println ("پیام به سرور ارسال شد:" + رشته جدید (messageOut)) ؛ int length = 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؛ کلاس عمومی 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 ("ارتباط آماده است.")؛ String messageOut = "سلام جهان"؛ clientOut.writeObject (messageOut) ؛ clientOut.flush ()؛ System.out.println ("پیام به سرور ارسال شد:" + messageOut)؛ String messageIn = (رشته) serverIn.readObject ()؛ }}

ایجاد برنامه شبکه در جاوا Step16
ایجاد برنامه شبکه در جاوا Step16

مرحله 16. پیام خوانده شده را وارد کنید

برای ورود به سیستم ، پیام دریافت شده را روی کنسول چاپ کنید و محتوای آن را چاپ کنید.

  • جریان داده ها

    واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ()؛ System.out.println ("پیام به سرور ارسال شد:" + رشته جدید (messageOut)) ؛ int length = serverIn.readInt ()؛ if (طول> 0) {بایت 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. Socket؛ کلاس عمومی 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 ("ارتباط آماده است.")؛ String messageOut = "سلام جهان"؛ clientOut.writeObject (messageOut) ؛ clientOut.flush ()؛ System.out.println ("پیام به سرور ارسال شد:" + messageOut)؛ String messageIn = (رشته) serverIn.readObject ()؛ System.out.println ("پیام دریافت شده از مشتری:" + messageIn)؛ }}

ایجاد برنامه شبکه در جاوا Step17
ایجاد برنامه شبکه در جاوا Step17

مرحله 17. اتصالات را قطع کنید

وقتی یک طرف جریانهای خود را ببندد ، اتصال قطع می شود. در جاوا ، با بستن جریان خروجی ، سوکت و جریان ورودی نیز بسته می شوند. هنگامی که یک طرف در طرف دیگر متوجه می شود اتصال قطع شده است ، باید جریان خروجی خود را نیز ببندد تا از نشت حافظه جلوگیری شود.

// کد حذف java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("اتصال برقرار شد.")؛ // کد حذف شده System.out.println ("ارتباط آماده است.") ؛ // کد حذف شده clientOut.close ()؛ serverOut.close ()؛ }}

ایجاد برنامه شبکه در جاوا Step18 V2
ایجاد برنامه شبکه در جاوا Step18 V2

مرحله 18. قطع اتصال

برای اهداف ثبت ، اتصال به اتصالات کنسول قطع شده است.

// کد حذف java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("اتصال برقرار شد.")؛ // کد حذف شده System.out.println ("ارتباط آماده است.") ؛ // کد حذف شده clientOut.close ()؛ serverOut.close ()؛ System.out.println ("اتصالات بسته شده است.")؛ }}

ایجاد برنامه شبکه در جاوا Step19
ایجاد برنامه شبکه در جاوا Step19

مرحله 19. خاتمه سرور

اتصالات قطع شده است ، اما سرور هنوز فعال است. مانند

ServerSocket

با هیچ جریانی مرتبط نیست ، باید صریحاً با تماس بسته شود

بستن()

روش.

// کد حذف java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("اتصال برقرار شد.")؛ // کد حذف شده System.out.println ("ارتباط آماده است.") ؛ // کد حذف شده clientOut.close ()؛ serverOut.close ()؛ System.out.println ("اتصالات بسته شده است.")؛ server.close ()؛ }}

ایجاد برنامه شبکه در جاوا Step20
ایجاد برنامه شبکه در جاوا Step20

مرحله 20. خاتمه ورود سرور

برای اهداف ثبت ، چاپ روی سرور کنسول خاتمه یافته است.

// کد حذف java.net. InetAddress؛ واردات java.net. ServerSocket ؛ واردات java.net. Socket؛ کلاس عمومی 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 ("اتصال برقرار شد.")؛ // کد حذف شده System.out.println ("ارتباط آماده است.") ؛ // کد حذف شده clientOut.close ()؛ serverOut.close ()؛ System.out.println ("اتصالات بسته شده است.")؛ server.close ()؛ System.out.println ("سرور خاتمه یافته است.")؛ }}

ایجاد برنامه شبکه در جاوا Step21
ایجاد برنامه شبکه در جاوا Step21

مرحله 21. کامپایل و اجرا کنید

ورود به سیستم به ما امکان می دهد بفهمیم که برنامه موفق بوده است یا خیر. خروجی مورد انتظار:

سرور شروع شد اتصال به سرور … اتصال برقرار شد. ارتباط آماده است. پیام ارسال شده به سرور: سلام جهان پیام دریافت شده از مشتری: سلام ارتباطات جهانی بسته شد. سرور قطع شد

در صورتی که خروجی شما مانند نمونه بالا نباشد ، که بعید است این اتفاق بیفتد ، چند راه حل وجود دارد:

  • اگر خروجی در خط متوقف شود

    اتصال برقرار شد.

    و جریان های شیء مورد استفاده قرار می گیرد ، هر یک را هموار کنید

    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. Collection؛ واردات java.util. List؛ /*** کلاس {code Server} نقطه پایانی سرور را در یک شبکه نشان می دهد. {code Server} هنگامی که به آدرس و پورت IP * خاصی متصل شد ، با مشتریان ارتباط برقرار می کند و قادر به برقراری ارتباط با آنها یا قطع ارتباط آنها است. *

* این کلاس دارای امنیت موضوعی است. * *version 1.0 *see Client *see Connection */ public class server پیاده سازی Runnable {سرور خصوصی ServerSocket؛ لیست خصوصی اتصالات ؛ موضوع موضوع خصوصی ؛ private private Object connectionsLock = شی جدید ()؛ /** * یک سرورcode} ایجاد می کند که با نام کاربری و پورت مشخص شده با کلاینت ها با حداکثر * طول درخواست صف از کلاینت های ورودی ارتباط برقرار می کند. * *param host آدرس میزبان برای استفاده. * شماره پورتparam port برای استفاده. *param backlog درخواست حداکثر طول صف از مشتریان ورودی. *throws NetworkException اگر هنگام راه اندازی سرور خطایی رخ دهد. */ public server (String host، int port، int backlog) NetworkException را پرتاب می کند {try {server = new ServerSocket (port، backlog، InetAddress.getByName (host))؛ } catch (UnknownHostException e) {throw new NetworkException ("نام میزبان حل نشد:" + host، e)؛ } catch (IllegalArgumentException e) {throw new NetworkException ("شماره پورت باید بین 0 تا 65535 باشد (شامل):" + پورت)) ؛ } catch (IOException e) {throw new NetworkException ("سرور راه اندازی نشد." ، ه)؛ } اتصالات = Collections.synchronizedList (ArrayList جدید ())؛ thread = موضوع جدید (این) ؛ thread.start ()؛ } /*** یک {code server} ایجاد می کند که با نام کاربری و پورت مشخص شده با مشتریان ارتباط برقرار می کند. * *param host آدرس میزبان برای اتصال. *param port شماره بند برای اتصال. *throws NetworkException اگر هنگام راه اندازی سرور خطایی رخ دهد. */ public server (String host، int port) NetworkException را پرتاب می کند {this (host، port، 50)؛ } /*** ارتباطات دریافتی مشتریان را می شنود ، می پذیرد و ثبت می کند. */Override public void run () {while (! server.isClosed ()) {try {connections.add (اتصال جدید (server.accept ())) ؛ } catch (SocketException e) {if (! e.getMessage (). برابر است ("سوکت بسته شده")) {e.printStackTrace ()؛ }} catch (NetworkException | IOException e) {e.printStackTrace ()؛ }}} /*** داده ها را برای همه مشتریان ثبت شده ارسال می کند. * *param داده داده برای ارسال. *throws IllegalStateException اگر هنگام سرور آفلاین نوشتن داده انجام شود. *throws IllegalArgumentException اگر داده هایی برای ارسال خالی است. */ پخش عمومی باطل (داده های شی) {if (server.isClosed ()) {پرتاب IllegalStateException جدید ("داده ها ارسال نمی شوند ، سرور آفلاین است.") ؛ } if (data == null) {throw new IllegalArgumentException ("داده های تهی")؛ } همگام سازی (connectionsLock) {برای (اتصال اتصال: اتصالات) {try {connection.send (data)؛ System.out.println ("داده ها با موفقیت به مشتری ارسال می شود.")؛ } catch (NetworkException e) {e.printStackTrace ()؛ }}}} /*** پیام قطع ارتباط ارسال می کند و ارتباط سرویس گیرنده مشخص را قطع می کند. * *param اتصال مشتری برای قطع ارتباط. *throws NetworkException اگر هنگام بستن اتصال خطایی رخ دهد. */ public void disconnect (اتصال اتصال) NetworkException را پرتاب می کند {if (connections.remove (connection)) {connection.close ()؛ }} /*** یک پیام قطع ارتباط برای همه سرویس گیرندگان ارسال می کند ، آنها را قطع کرده و سرور را خاتمه می دهد. */ public void close () NetworkException را {synchronized (connectionsLock) {برای (اتصال اتصال: اتصالات) {try {connection.close () می اندازد. } catch (NetworkException e) {e.printStackTrace ()؛ }}} connections.clear ()؛ سعی کنید {server.close ()؛ } catch (IOException e) {throw new NetworkException ("خطا هنگام بستن سرور.")؛ } سرانجام {thread.interrupt ()؛ }} /*** باز می گرداند که آیا سرور آنلاین است یا خیر. * *return اگر سرور آنلاین باشد درست است. کاذب وگرنه */ public boolean isOnline () {return! server.isClosed ()؛ } /*** مجموعه ای از مشتریان ثبت شده را برمی گرداند. */ public Connection getConnections () {synchronized (connectionsLock) {return connections.toArray (اتصال جدید [connections.size ()]) ؛ }}}

Client.java

واردات java.io. IOException؛ واردات java.net. Socket؛ واردات java.net. UnknownHostException؛ /*** کلاس {code Client} نشان دهنده نقطه پایانی سرویس گیرنده در شبکه است. {code Client} ، وقتی به سرور * خاصی متصل شد ، تضمین می شود که فقط می تواند با سرور ارتباط برقرار کند. اینکه آیا سایر سرویس گیرندگان داده ها را دریافت می کنند یا نه ، بستگی به پیاده سازی سرور دارد. *

* این کلاس دارای امنیت موضوعی است. * *version 1.0 *see Server *see Connection */ public class Client {اتصال خصوصی اتصال ؛ /*** در میزبان و پورت مشخص شده یک {code Client} متصل به سرور ایجاد می کند. * *param host آدرس میزبان برای اتصال. *param port شماره بند برای اتصال. *throws NetworkException اگر هنگام راه اندازی سرور خطایی رخ دهد. */ public Client (String host، int port) NetworkException را پرتاب می کند {try {connection = new Connection (سوکت جدید (میزبان ، پورت)) ؛ } catch (UnknownHostException e) {throw new NetworkException ("نام میزبان حل نشد:" + host، e)؛ } catch (IllegalArgumentException e) {throw new NetworkException ("شماره پورت باید بین 0 تا 65535 باشد (شامل):" + پورت)) ؛ } catch (IOException e) {throw new NetworkException ("سرور راه اندازی نشد." ، ه)؛ }} /*** داده ها را به طرف مقابل ارسال می کند. * *param داده داده برای ارسال. *throws NetworkException اگر نوشتن در جریان خروجی ناموفق باشد. *throws IllegalStateException اگر هنگام بسته شدن اتصال ، نوشتن داده انجام شود. *throws IllegalArgumentException اگر داده ای برای ارسال خالی است. *throws UnsupportedOperationException در صورت تلاش برای ارسال نوع داده پشتیبانی نشده. */ public void send (Object data) NetworkException {connection.send (data) را پرتاب می کند. } /*** پیام قطع ارتباط را به سرور ارسال می کند و ارتباط را با آن قطع می کند. */ public void close () NetworkException {connection.close () را پرتاب می کند. } /*** باز می گرداند که آیا سرویس گیرنده به سرور متصل است یا خیر. * *return True اگر مشتری متصل باشد. کاذب وگرنه */ public boolean isOnline () {return connection.isConnected ()؛ } /*** نمونه {link Connection} سرویس گیرنده را برمی گرداند. */ public Connection getConnection () {بازگشت اتصال ؛ }}

Connection.java

واردات java.io. DataInputStream ؛ واردات java.io. DataOutputStream ؛ واردات java.io. IOException؛ واردات java.net. Socket؛ واردات java.net. SocketException؛ /** * کلاس {code Connection} نشان دهنده اتصال از سرور به سرویس گیرنده یا نقطه پایانی سرویس گیرنده در شبکه * {code Connection} ، پس از اتصال ، بسته به شرایط ، می تواند داده ها را با طرف یا طرفهای دیگر مبادله کند. در سرور * پیاده سازی. *

* این کلاس دارای امنیت موضوعی است. * *version 1.0 *see Server *see Client */ class public Connection پیاده سازی Runnable {سوکت سوکت خصوصی؛ خصوصی DataOutputStream out؛ خصوصی DataInputStream در؛ موضوع موضوع خصوصی ؛ private final Object writeLock = شی جدید ()؛ شیء خصوصی خصوصی readLock = شی جدید ()؛ /*** با استفاده از جریانهای {link Socket} {code Connection} را ایجاد می کند. * *param سوکت برای واکشی جریانها از.*/ public Connection (سوکت سوکت) NetworkException را پرتاب می کند {if (socket == null) {throw new IllegalArgumentException ("سوکت تهی") ؛ } this.socket = سوکت؛ سعی کنید {out = new DataOutputStream (socket.getOutputStream ()) ؛ } catch (IOException e) {throw new NetworkException ("به جریان خروجی دسترسی نداشتم." ، ه)؛ } try {in = new DataInputStream (socket.getInputStream ()) ؛ } catch (IOException e) {throw new NetworkException ("دسترسی به جریان ورودی امکان پذیر نیست." ، e)؛ } thread = موضوع جدید (این) ؛ thread.start ()؛ } /*** پیامها را می خواند تا ارتباط با طرف مقابل زنده باشد. */Override public void run () {while (! socket.isClosed ()) {try {int identifier؛ بایت بایت؛ همگام سازی (readLock) {identifier = in.readInt ()؛ int length = in.readInt ()؛ if (طول> 0) {بایت = بایت جدید [طول] ؛ in.readFully (بایت ، 0 ، بایت. طول) ؛ } else {continue؛ }} switch (شناسه) {case Identifier. INTERNAL: String command = new String (بایت)؛ if (command.equals ("قطع ارتباط")) {if (! socket.isClosed ()) {System.out.println ("بسته قطع ارتباط دریافت شد.") ؛ سعی کنید {close ()؛ } catch (NetworkException e) {return؛ } } } زنگ تفريح؛ case Identifier. TEXT: System.out.println ("پیام دریافت شد:" + رشته جدید (بایت))؛ زنگ تفريح؛ پیش فرض: System.out.println ("داده های ناشناخته دریافت شده است.")؛ }} catch (SocketException e) {if (! e.getMessage (). برابر است ("سوکت بسته شده")) {e.printStackTrace ()؛ }} catch (IOException e) {e.printStackTrace ()؛ }}} /*** داده ها را به طرف مقابل ارسال می کند. * *param داده داده برای ارسال. *throws NetworkException اگر نوشتن در جریان خروجی ناموفق باشد. *throws IllegalStateException اگر هنگام بسته شدن اتصال ، نوشتن داده انجام شود. *throws IllegalArgumentException اگر داده ای برای ارسال خالی است. *throws UnsupportedOperationException در صورت تلاش برای ارسال نوع داده پشتیبانی نشده. */ public void send (داده های شی) NetworkException را پرتاب می کند {if (socket.isClosed ()) {throw new IllegalStateException ("داده ها ارسال نشد ، اتصال بسته است.") ؛ } if (data == null) {throw new IllegalArgumentException ("داده های تهی")؛ } شناسه int؛ بایت بایت؛ if (data shembullof String) {identifier = Identifier. TEXT؛ بایت = ((رشته) داده).getBytes ()؛ } else {پرتاب جدید UnsupportedOperationException ("نوع داده پشتیبانی نشده:" + data.getClass ()) ؛ } try {synchronized (writeLock) {out.writeInt (شناسه)؛ out.writeInt (بایت. طول)؛ out.write (بایت)؛ out.flush ()؛ }} catch (IOException e) {پرتاب جدید NetworkException ("داده ها ارسال نشد." ، ه)؛ }} /*** پیامی را به طرف مقابل ارسال می کند و ارتباط را قطع می کند. */ public void close () NetworkException را پرتاب می کند {if (socket.isClosed ()) {throw new IllegalStateException ("اتصال قبلاً بسته شده است.") ؛ } try {byte message = "disconnect".getBytes ()؛ همگام سازی (writeLock) {out.writeInt (Identifier. INTERNAL) ؛ out.writeInt (message.length)؛ out.write (پیام) ؛ out.flush ()؛ }} catch (IOException e) {System.out.println ("پیام قطع ارتباط ارسال نشد.")؛ } try {synchronized (writeLock) {out.close ()؛ }} catch (IOException e) {throw new NetworkException ("خطا هنگام بستن اتصال" ، e) ؛ } سرانجام {thread.interrupt ()؛ }} /*** بر می گردد که آیا اتصال به طرف مقابل زنده است یا خیر. * * @بازگشت درست اگر اتصال زنده است. کاذب وگرنه */ public boolean isConnected () {return! socket.isClosed ()؛ }}

Identifier.java

/** * کلاس {code Identifier} شامل ثابتهایی است که توسط {link Connection} برای سریال سازی و ضدعفونی کردن داده * های ارسال شده در شبکه استفاده می شود. * *version 1.0 *see Connection * / شناسه کلاس عمومی عمومی { / ** * شناسه پیامهای داخلی. */ public static final int INTERNAL = 1 ؛ /*** شناسه پیام های متنی. */ public static final int TEXT = 2 ؛ }

NetworkException.java

/*** کلاس {code NetworkException} خطای مربوط به شبکه را نشان می دهد. * / کلاس عمومی NetworkException Exception را گسترش می دهد { / *** {code NetworkException} را با پیام@{code null} ایجاد می کند. * / public NetworkException () {} / *** با پیام مشخص شده یک {code NetworkException} ایجاد می کند. * *param message پیامی برای توصیف خطا. */ publicException (پیام رشته) {فوق العاده (پیام) ؛ } /*** یک {code NetworkException} با پیام و علت مشخص ایجاد می کند. * *param message پیامی برای توصیف خطا. *param cause علت خطا. */ publicException (پیام رشته ، علت پرتاب) {فوق العاده (پیام ، علت) ؛ } /*** یک {code NetworkException} با علت مشخص ایجاد می کند. * *param cause علت خطا. */ publicException (علت قابل پرتاب) {فوق العاده (علت) ؛ }}

UsageExample.java

/*** کلاس {code UsageExample} استفاده از {link Server} و {link Client} را نشان می دهد. این مثالها از * {link موضوع#خواب (طولانی)} برای اطمینان از اجرای هر بخش استفاده می کند ، زیرا شروع و بسته شدن سریع باعث می شود برخی از * بخش ها اجرا نشوند. * *version 1.0 *see Server *see Client */ public class UsageExample {public static void main (String args) Exception {String host = "localhost"؛ پورت int = 10430؛ سرور سرور = سرور جدید (میزبان ، پورت) ؛ مشتری مشتری = مشتری جدید (میزبان ، بندر) ؛ Thread.sleep (100L) ؛ client.send ("سلام.")؛ server.broadcast ("هی ، رفیق!")؛ Thread.sleep (100L) ؛ server.disconnect (server.getConnections () [0]) ؛ // یا client.close () برای قطع ارتباط با server-side server.close ()؛ }}

توصیه شده: