JAVA多线程----用--进阶--》网络编程2

 

import java.io.*;

import java.net.*;

/**

 * 服务器端逻辑线程

 */

public class LogicThread extends Thread {

         Socket socket;

         InputStream is;

         OutputStream os;

         public LogicThread(Socket socket){

                   this.socket = socket;

                   start(); //启动线程

         }

        

         public void run(){

                   byte[] b = new byte[1024];

                   try{

                            //初始化流

                            os = socket.getOutputStream();

                            is = socket.getInputStream();

                            for(int i = 0;i < 3;i++){

                                     //读取数据

                                     int n = is.read(b);

                                     //逻辑处理

                                     byte[] response = logic(b,0,n);

                                     //反馈数据

                                     os.write(response);

                            }

                   }catch(Exception e){

                            e.printStackTrace();

                   }finally{

                            close();

                   }

         }

        

         /**

          * 关闭流和连接

          */

         private void close(){

                   try{

                            //关闭流和连接

                            os.close();

                            is.close();

                            socket.close();

                   }catch(Exception e){}

         }

        

         /**

          * 逻辑处理方法,实现echo逻辑

          * @param b 客户端发送数据缓冲区

          * @param off 起始下标

          * @param len 有效数据长度

          * @return

          */

         private byte[] logic(byte[] b,int off,int len){

                   byte[] response = new byte[len];

                   //将有效数据拷贝到数组response中

                   System.arraycopy(b, 0, response, 0, len);

                   return response;

         }

}

  在该示例代码中,每次使用一个连接对象构造该线程,该连接对象就是该线程需要处理的连接,在线程构造完成以后,该线程就被启动起来了,然后在run方法内部对客户端连接进行处理,数据交换的逻辑和前面的示例代码一致,只是这里将接收到客户端发送过来的数据并进行处理的逻辑封装成了logic方法,按照前面介绍的IO编程的内容,客户端发送过来的内容存储在数组b的起始下标为0,长度为n个中,这些数据是客户端发送过来的有效数据,将有效的数据传递给logic方法,logic方法实现的是echo服务的逻辑,也就是将客户端发送的有效数据形成以后新的response数组,并作为返回值反馈。

PS:下接线程池版本

posted @ 2017-02-28 17:31  Tritone  阅读(328)  评论(0编辑  收藏  举报