: :
استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputStream ؛ استيراد java.net.socket ؛ استيراد java.util.logging.level ؛ استيراد java.util.logging.logger ؛ الطبقة العامة echoprotocol تنفذ runnable {private static final int bufsize = 32 ؛ // الحجم (بالبايت) من إدخال/س العازلة على المقبس الخاص ؛ // Socket Connect to Client Private Logger Logger ؛ // Server Logger Public Echoprotocol (Socket Clientsocket ، Logger Logger) {this.clientsocket = clientsocket ؛ this.logger = logger ؛ ) outputStream Out = clientsocket.getOutputStream () ؛ int recvmsgsize ؛ // حجم الرسالة المستلمة int totalBytesechoed = 0 ؛ // bytes المستلمة من العميل byte [] echobuffer = new byte [bufsize] ؛ // استقبال Buffer // استقبال حتى يغلق العميل الاتصال ، يشار إليه بواسطة -1 بينما ((recvmsgsize = in.read (echobuffer))! = -1) {out.write (echobuffer ، 0 ، recvmsgsize) ؛ TotalBytesechoed += recvmsgsize ؛ } logger.info ("client" + clientsocket.getRemotesocketAddress () + "، reuled" + totalBytesechoed + "bytes.") ؛ } catch (ioException ex) {logger.log (level.warning ، "استثناء في بروتوكول ECHO" ، ex) ؛ } أخيرًا {try {clientsocket.close () ؛ } catch (ioException e) {}}} public void run () {handleechoclient (this.clientsocket ، this.logger) ؛ }}二、每个客户端请求都新启一个线程的 TCP : :
استيراد java.io.ioException ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ استيراد java.util.logging.logger ؛ الطبقة العامة tcpechoserverthread {public static void main (string [] args) يلقي ioException {// إنشاء مقبس خادم لقبول طلبات اتصال العميل serversoctocket servsock = new serversocket (5500) ؛ logger logger = logger.getLogger ("عملي") ؛ // قم بتشغيل إلى الأبد ، وقبول وتفريخ مؤشر ترابط لكل اتصال بينما (صحيح) {socket clntsock = servsock.accept () ؛ // block في انتظار الاتصال // تفرخ مؤشر ترابط معالجة مؤشر ترابط توصيل جديد = مؤشر ترابط جديد (echoprotocol جديد (clntsock ، logger)) ؛ thread.start () ؛ logger.info ("تم إنشاؤها وبدأت مؤشر ترابط" + thread.getName ()) ؛ } / * لم يتم الوصول إليه * /}}三、固定线程数的 TCP : :
استيراد java.io.ioException ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ استيراد java.util.logging.level ؛ استيراد java.util.logging.logger ؛ الطبقة العامة tcpechoserverpool {public static void main (string [] args) يلقي ioException {int threadpoolsize = 3 ؛ . logger logger النهائي = logger.getLogger ("عملي") ؛ // تفرخ عددًا ثابتًا من مؤشرات الترابط لعملاء الخدمة لـ (int i = 0 ؛ i <threadpoolsize ؛ i ++) {thread thread = new thread () {public void run () {while (true) {try {socket clntsock = servsock.accept () ؛ // انتظر اتصال echoprotocol.handleechoclient (clntsock ، logger) ؛ // التعامل معها} catch (ioException ex) {logger.log (level.warning ، "Client Accept fans" ، ex) ؛ }}}} ؛ thread.start () ؛ logger.info ("تم إنشاؤها وبدأت Thread =" + thread.getName ()) ؛ }}}四、使用线程池 (使用 الربيع 的线程次会有队列、最大线程数、最小线程数和超时时间的概念)
1. : :
استيراد java.util.concurrent.*؛ /** * 任务执行者 * * Author Watson Xu * since 1.0.0 <p> 2013-6-8 上午 10:33:09 </p> */public class threadpooltaskexecutor执行器会在需要自行任务而线程池中没有线程的时候来调用该程序。对于 Callable 类型的调用通过封装以后转化为 Runnable */public thread newTher (Runnable R) {counting ++ ؛ Public Static Void استدعاء (المهمة القابلة للتشغيل ، الوحدة الزمنية ، فترة طويلة) يلقي TimeOutException ، RunTimeException {invoke (Task ، NULL ، UNIT ، TIMEOUT) ؛ } static static <T> t invoke (مهمة Runnable ، نتيجة t ، وحدة الوقت ، iss timeout) يلقي TimeOutException ، RunTimeException {Future <T> Future = Executor.Submit (المهمة ، النتيجة) ؛ t t = null ؛ حاول {t = future.get (timeout ، unit) ؛ } catch (timeoutexception e) {رمي timeoutexception ("thread invoke timeout ...") ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ } إرجاع t ؛ } static static <T> t invoke (المهمة القابلة للاتصال <T> ، وحدة TimeUnit ، فترة طويلة) يلقي TimeOutException ، RunTimeException {// 这里将任务提交给执行器 , 任务已经启动 , 这里是异步的。 المستقبل <T> المستقبل = Executor.Submit (Task) ؛ // system.out.println ("Task aready in thread") ؛ t t = null ؛ حاول { / * * 这里的操作是确认任务是否已经完成 , 有了这个操作以后 * 1) 对 invoke () 的调用线程变成了等待任务完成状态 * 2) 主线程可以接收子线程的处理结果 * / t = future.get (timeout ، unit) ؛ } catch (timeoutexception e) {رمي timeoutexception ("thread invoke timeout ...") ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ } إرجاع t ؛ }}2. 具有伸缩性的 TCP 服务端 :
استيراد java.io.ioException ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ استيراد java.util.concurrent.timeunit ؛ استيراد java.util.logging.logger ؛ استيراد demo.callable.ThreadPoolTaskexecutor ؛ الطبقة العامة TCPechoServerexecutor {Public Static Void Main (String [] args) يلقي ioException {// إنشاء مقبس خادم لقبول طلبات اتصال العميل ServersOction ServSock = New ServersOcket (5500) ؛ logger logger = logger.getLogger ("عملي") ؛ // قم بتشغيل Forever ، وقبول وتأتيح المواضيع لخدمة كل اتصال بينما (صحيح) {socket clntsock = servsock.accept () ؛ // كتلة في انتظار الاتصال //executorservice.submit(new echoprotocol (clntsock ، logger)) ؛ حاول {threadpooltaskexecutor.invoke (echoprotocol جديد (clntsock ، logger) ، timeUnit.Seconds ، 3) ؛ } catch (استثناء e) {} //service.execute(new timelimitechoprotocol (clntsock ، logger)) ؛ } / * لم يتم الوصول إليه * /}}以上就是本文的全部内容 , 查看更多 java 的语法 , : : 《التفكير في java 中文手册》、《 jdk 1.7 参考手册官方英文版》、《 jdk 1.6 api java 中文参考手册》、《 jdk 1.5 api java 中文参考手册》 , 也希望大家多多支持武林网。