ما هو المقبس
يطلق البرنامجان على الشبكة تبادل البيانات من خلال اتصال اتصال اثنين. عادةً ما يتم استخدام المقبس لتحقيق الاتصال بين العميل وحزب الخدمة. Socket هي واجهة برمجة شائعة جدًا لبروتوكول TCP/IP ، ويتم تحديد المقبس بواسطة عنوان IP ورقم منفذ.
ومع ذلك ، فإن أنواع البروتوكولات التي تدعمها المقبس ليست فقط TCP/IP ، لذلك لا يوجد بالضرورة اتصال بين الاثنين. في بيئة Java ، تشير Socket Programming بشكل أساسي إلى برمجة الشبكة استنادًا إلى بروتوكول TCP/IP.
عملية اتصال المقبس
ما إذا كان لدى Server End Beass (Monitor) طلب اتصال ، يرسل العميل طلب اتصال إلى جانب الخادم ، ويرسل الخادم رسالة الوصول إلى العميل. تم إنشاء اتصال. يمكن لكل من الخادم والعميل التواصل مع الطرف الآخر من خلال الإرسال والكتابة وطرق أخرى.
للحصول على مقبس كامل ، يجب تضمين الهياكل الأساسية التالية.
(1) إنشاء مقبس ؛
(2) افتح الإدخال/التدفق الخارجي المتصل بالمقبس ؛
(3) قراءة/كتابة تشغيل المقبس وفقًا لبروتوكول معين ؛
(4) قم بإيقاف تشغيل المقبس. لا تسبب أي شيء.
إنشاء المقبس
يوفر Java نوعين من المآخذ والخادمات في java.net ، والتي تستخدم لتمثيل العميل والخادم لاتصال اثنين من الطريق. هاتان فئتان جيدتان للغاية جيدان للغاية ، وهو مناسب للاستخدام. طريقة الهيكل كما يلي:
Socket (عنوان Indaddress ، منفذ int) ؛ LocalAddr ، Socket) Socket (Intadddress ، Serverseal (Port) ؛
من بينها ، يشير عنوان IP ، اسم المضيف ورقم المنفذ في الاتصالين ، على التوالي. عنوان مضيف ServersOcket) ، INSS هي الفئة الأصل للمقبس ، والتي يمكن استخدامها لإنشاء خدمية ويمكن استخدامها لإنشاء مقبس. العد يعني الحد الأقصى لعدد الاتصالات التي يمكن أن يدعمها الخادم. على سبيل المثال: تعلم شبكة الفيديو http://www.xxspw.com
عميل المقبس = مقبس جديد
لاحظ أنه عند تحديد منفذ ، يجب أن تكون حذراً. يوفر كل منفذ خدمة محددة فقط. تم حجز رقم المنفذ من 0 ~ 1023 بواسطة النظام. اختر رقم المنفذ ، من الأفضل اختيار واحد أكبر من 1023. الرقم هو منع النزاعات.
في حالة حدوث خطأ عند إنشاء مأخذ توصيل ، سيتم إنشاء iOexception ، ويجب معالجته في البرنامج. لذلك ، يجب التقاط أو إلقاء إنشاء مقبس أو خدم.
شفرة
الخادم
Package Socket ؛ قبول () " +count +" مرات! ") ) {flag = false. العميل {client .close () ؛}} أخيرًا {server.close () ؛}}}
عميل
Package Socket ؛ . CINLY. }}}}}}
خادم ربط IP
عند كتابة مآخذ التواصل مع C ، يمكن أن تحدد هيكل Sockaddr_in Sin_addr.s_addr ، أي يمكنك تحديد عنوان IP.
قد أرغب فقط في ربط عنوان IP لبطاقة شبكة ETH0 ، لأن LO و WLAN0 قد تستخدم مضيفًا افتراضيًا NGINX مع منفذ واحد.
يخطط
مُنشئ الخدم على النحو التالي:
Serversoctocke العامة (منفذ int ، intadddress bindddr) يلقي ioexception
المعلمة:
منفذ ميناء TCP Port
تراكم -القائمة إلى تراكم
bindaddr -to inded by the the server
نظرًا لأن Inetaddress ليس لديه مُنشئ ، فقد كنت متشابكة هنا لفترة من الوقت.
على سبيل المثال رمز
Indadress bindip = inetaddress.getByName ("192.168.1.168") ؛ وصول متزامن
يعالج الخادم العديد من العملاء عن طريق إضافة طلبات متعددة في نفس الوقت.
رمز الخادم
CAMITACTING java.io. static int clientnum = 0 ؛ ) (Socket S ، int) {this.client = s ؛ true) {String Data = input.ReadLine () ؛ ) ؛ ؛} catch (ioException e) {
لم يتم تغيير رمز العميل رمز العميل بشكل أساسي ، مضيفًا عملية خروج
Capitalsocket ؛ 1.168 "، 9898) ؛ جرب {printWriter Output = new printWriter (client.getOutputStream () ، true) ؛ Scanner cin = new scanner (system.in) ؛ string ward ؛ بينما (cin .hasnext ()) {words = cin. NextLine () ؛ ؛} أخيرًا {client.close () ؛}}}