当前位置: 代码迷 >> J2SE >> 线程isAlive的有关问题
  详细解决方案

线程isAlive的有关问题

热度:250   发布时间:2016-04-23 20:20:11.0
线程isAlive的问题

package com.example.yuncool;


import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

public  class RevcThread extends Thread {  

      public static  SocketChannel socket=null;
    
     public   Selector selector;
    
     ByteBuffer readBuffer=ByteBuffer.allocate(1024);
     //定义用来存储发送数据的byte缓冲区
     //定义用于接收服务器返回的数据的缓冲区
     static ByteBuffer sendBuffer=ByteBuffer.allocate(600);
     HeapHandler hHandler;
    
     static Context mContext;
     public RevcThread(Context _context)
     {
     mContext=_context;
     }
    
        public  void ConnectScokect()
      
        @Override
     public void run() { 
     try 
     {
     Looper.prepare(); 
     socket = SocketChannel.open();
         // 设置通道为非阻塞  
         socket.configureBlocking(false);  
         // 获得一个通道管理器  
         selector = Selector.open();  

         // 客户端连接服务器,其实方法执行并没有实现连接,需要在listen()方法中调  
         //用channel.finishConnect();才能完成连接  
         socket.connect(new InetSocketAddress("192.168.1.100",60000));  //www.yicool.cn
         //将通道管理器和该通道绑定,并为该通道注册SelectionKey.OP_CONNECT事件。  
         socket.register(selector, SelectionKey.OP_CONNECT);  
     while (true&&DefaultActivity.isNetwork)
     {  

     //如果客户端连接没有打开就退出循环
     //if(!client.isOpen()) break;
     //此方法为查询是否有事件发生如果没有就阻塞,有的话返回事件数量
     int shijian=selector.select();
     //如果没有事件返回循环
     if(shijian==0)
     {
     continue;
     }
    

     //遍例所有的事件
     for (SelectionKey key : selector.selectedKeys())
     {
     //删除本次事件
     selector.selectedKeys().remove(key);
     //如果本事件的类型为read时,表示服务器向本客户端发送了数据
     if (key.isReadable())
     {
     //将临时客户端对象实例为本事件的socket对象
     SocketChannel sc=(SocketChannel) key.channel();
     //定义一个用于存储所有服务器发送过来的数据
    
     //将缓冲区清空以备下次读取
     readBuffer.clear();
     int bytesRead=sc.read(readBuffer); 
     //此循环从本事件的客户端对象读取服务器发送来的数据到缓冲区中
     readBuffer.flip();

                    // 将字节转化为为UTF-8的字符串     
                    String receivedString = Charset.forName("UTF-8").newDecoder().decode(readBuffer).toString();  
    
     };
     Thread.sleep(200);
     }
     Looper.loop(); 
     }
     catch (SocketTimeoutException e)
     {
     // TODO 自动生成的 catch 块
     Log.e("RevcThread","SocketTimeoutException");
     e.printStackTrace();
     }
     catch (Exception e)