一、服务端回传服务类:
java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.outputStreamをインポートします。 java.net.socketをインポートします。 java.util.logging.levelをインポートします。 java.util.logging.loggerをインポートします。パブリッククラスエコプロトコルは実行可能{private static final int bufsize = 32; // I/Oバッファープライベートソケットクライアントソケットのサイズ(バイト単位)。 //ソケットはクライアントプライベートロガーロガーに接続します。 //サーバーロガーpublic echoprotocol(socket clientsocket、logger logger){this.clientsocket = clientsocket; this.logger = logger; } public static void handleCoclient(socket clientsocket、logger logger){try {//入力を取得して、ソケット入力から出力I/Oストリームを取得しますin = clientsocket.getinputStream(); outputStream out = clientSocket.getOutputStream(); int recvmsgsize; //受信メッセージのサイズint totalbytesechoed = 0; //クライアントバイトから受信したバイト[] echobuffer = new byte [bufsize]; //クライアントが接続を閉じるまでバッファーを受信します。 totalbytesechoed += recvmsgsize; } logger.info( "client" + clientsocket.getRemoteSocketAddress() + "、echoed" + totalbyteChoed + "bytes"); } catch(ioException ex){logger.log(level.warning、 "Echo Protocol"、ex); }最後に{try {clientsocket.close(); } catch(ioexception e){}}} public void run(){handleCoclient(this.clientsocket、this.logger); }}二、每个客户端请求都新启一个线程的 TCP服务端:
java.io.ioexceptionをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。 java.util.logging.loggerをインポートします。 public class tcpechoserverthread {public static void main(string [] args)throws ioexception {//サーバーソケットを作成してクライアント接続要求Serversocket servsock = new Serversocket(5500); logger logger = logger.getLogger( "practical"); //(true){socket clntsock = servsock.accept(); //接続を待っているブロックthread.start(); logger.info( "作成および開始スレッド" + thread.getName()); } / *到達しない * /}}三、固定线程数的 TCP服务端:
java.io.ioexceptionをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。 java.util.logging.levelをインポートします。 java.util.logging.loggerをインポートします。 Public Class TCPechoserverpool {public static void main(string [] args)throws ioexception {int threadpoolsize = 3; // ThreadPoolsize Final Serversocket servsock = new Serversocket(5500)を修正しました。 final logger logger = logger.getLogger( "practical"); //(int i = 0; i <threadpoolsize; i ++){thread thread = new thread(){public void run(){while(true){try {socket clntsock = servsock.accept(); //接続を待ちますechoprotocol.handleeCoclient(clntsock、logger); // handle It} catch(ioException ex){logger.log(level.warning、 "client Accept failed"、ex); }}}}; thread.start(); logger.info( "作成および開始thread =" + thread.getName()); }}}四、使用线程池(使用春的线程次会有队列、最大线程数、最小线程数和超时时间的概念)
1.线程池工具类:
java.util.concurrent。*; /** *任务执行者 * * @Author watson xu * @since 1.0.0 <p> 2013-6-8 Callable runnable */count ++; public static void invoke(runnable task、timeunit unit、long timeout)throws timeoutexception、runtimeexception {invoke(task、null、unit、timeout); } public static <t> t Invoke(runnable task、t result、timeunit unit、long timeout)the timeoutexception、runtimeexception {future <t> future = executor.submit(タスク、結果); t t = null; {t = future.get(timeout、unit); } catch(timeoutexception e){throw new Timeoutexception( "スレッドがタイムアウトを呼び出す..."); } catch(Exception e){新しいruntimeException(e); } return t; } public static <t> t invoke(callable <t> task、timeunit unit、long timeout)the timeoutexception、runtimeexception {//这里将任务提交给执行器、任务已经启动、任务已经启动、这里是异步的。future <t> future = executor.submit(task); // system.out.println( "タスクアレディのスレッド"); t t = null; { / * *这里的操作是确认任务是否已经完成、有了这个操作以后 * 1)对invoke()的调用线程变成了等待任务完成状态 * 2)主线程可以接收子线程的处理结果 * / t = future.get(timeout、unit); } catch(timeoutexception e){throw new Timeoutexception( "スレッドがタイムアウトを呼び出す..."); } catch(Exception e){新しいruntimeException(e); } return t; }}2.具有伸缩性的TCP服务端:
java.io.ioexceptionをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。 java.util.concurrent.timeunitをインポートします。 java.util.logging.loggerをインポートします。 Import demo.callable.threadpooltaskexecutor; public class tcpechoserverexecutor {public static void main(string [] args)throws ioexception {//サーバーソケットを作成してクライアント接続を受け入れるServersockets servsock = new Serversocket(5500); logger logger = logger.getLogger( "practical"); //永久に実行し、スレッドを受け入れ、各接続を使用して(true){socket clntsock = servsock.accept(); //接続を待っているブロックtry {threadpooltaskexecutor.invoke(new echoprotocol(clntsock、logger)、timeunit.seconds、3); } catch(Exception e){} //service.execute(new timelimitechoprotocol(clntsock、logger)); } / *到達しない * /}}以上就是本文的全部内容、查看更多、查看更多java的语法、大家可以关注:shink javaでの思考中文手册》、《 jdk 1.7 参考手册官方英文版》、《 jdk 1.6 api java