في كثير من الأحيان في مشاريع Javaweb ، نحتاج إلى استخدام التوصيل التوصيل لتنفيذ الوظائف. عند استخدام Socket في الويب ، نحتاج إلى إنشاء برنامج مستمع ، وبدء الاستماع إلى المقبس عند بدء تشغيل البرنامج. سيناريو التطبيق الخاص بنا موجود في مشروع Java ، والذي يتطلب تواصل أجهزة خارجية من خلال TCP للحصول على البيانات التي تم تحميلها بواسطة الجهاز والاستجابة للبيانات.
لنلقي نظرة على رمز الاستماع على الويب:
استيراد javax.servlet.servletcontextevent socketThread.CloseSocketServer () ؛ SocketThRead.Interrupt () ؛ }} Override public void contextInitialized (servletContextevent Arg) {// todo method method method method if (null == socketThread) {// إنشاء socketThRead = new SocketThread (null) ؛ // START THREEP SOCKETTHREAD.START () ؛ }}}إنشاء موضوع:
استيراد java.io.ioException ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ public colockthread يمتد thread {private serversocketocket = null ؛ SocketThRead (serversocket serverscoket) {try {if (null == serversocket) {this.serversocket = new serversocket () ؛ System.out.println ("Socket start") ؛ }} catch (استثناء e) {system.out.println ("خطأ SocketThread إنشاء خدمة Socket") ؛ E.PrintStackTrace () ؛ }} public void run () {بينما (true) {try {if (serversocket == null) {break ؛} else (serversocket.isclosed ()) {break ؛} socket Socket = serversocket.accept () ؛ if (null! = socket &&! socket.isclosed ()) {// Process Process Data Thread t = new Thread (SocketOperate (Socket)) ؛ T.Start () ؛ } else {break ؛}} catch (استثناء e) {system.out.println ("خطأ في إنشاء Socket في SocketTread") ؛ E.PrintStackTrace () ؛ }}} public void clostesocketserver () {try {if (null! = serversOcket &&! serversOcket.isclosed ()) {serversocket.close () ؛ }} catch (ioException e) {// todo catch catch e.printstacktrace () ؛ }}}معالجة البيانات المستلمة:
استيراد java.io.bufferedReader ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstreamreader ؛ استيراد java.io.outputstream ؛ استيراد java.net.socket ؛ فئة public socketoperate تنفذ runnable. // دفق الإدخال المقابل للمقبس المعالج بواسطة هذا الخيط bufferreader br = null ؛ سلسلة str = null ؛ محتوى السلسلة = فارغ ؛ inputStreamReader reader = null ؛ SocketOperate (Socket Socket) يلقي ioException {this.socket = socket ؛ reader = new inputStreamReader (this.socket.getInputStream () ، "utf-") ؛ br = جديد bufferedreader (reader) ؛ } Override public void run () {try {// استخدم حلقة لقراءة البيانات المرسلة من العميل باستمرار من المقبس بينما (true) {content = readFromClient () ؛ system.out.println (content) ؛ if (content == null) {break ؛ } outputStream OS = socket.getOutputStream () ؛ OS.Write (("res ، OK ، <year class ، xiao ming> ،،#" + "/n Rely: os.flush () ؛}} catch (ioException e) {E.PrintStackTrace () ؛ }} // تحديد طريقة قراءة بيانات العميل الخاصة readfromclient () {try {str = br.readline () ؛ إرجاع شارع } // إذا تم اكتشاف استثناء ، فهذا يعني أن العميل المقابل للمقبس قد أغلق الصيد (ioException e) {try {br.close () ؛ reader.close () ؛ socket.close (؛} catch (ioexception e) }}رمز العميل:
PackageImport java.io.*؛ استيراد java.net.*؛ الطبقة العامة TalkClient {public static void main (string args []) remrows unknownhostexception ، iOexception {socket socket = new Socket ("..." ،) ؛ inputStreamReader (socket.getInputStream ()))) ؛ int i = ؛ بينما (socket.isconnected ()) {os.print ("beat ،،،،،. OS.Close () ؛ // إغلاق دفق إخراج المقبس IS.Close () ؛ // إغلاق مقبس دفق دفق الإدخال. cclose () ؛ // إغلاق المقبس}}ما ورد أعلاه هو طريقة استخدام اتصالات التوصيل متعدد الخيوط وطويلة في مشاريع الويب Java التي قدمها المحرر. آمل أن يكون ذلك مفيدًا للجميع!