快速业务通道

Java编程那些事儿108——网络编程示例1 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
example1; import java.io.*; import java.net.*; /** * 实现质数判别逻辑的线程 */ public class PrimeLogicThread extends Thread {  Socket socket;  InputStream is;  OutputStream os;  public PrimeLogicThread(Socket socket){   this.socket = socket;   init();   start();  }  /**  * 初始化  */  private void init(){   try{     is = socket.getInputStream();     os = socket.getOutputStream();   }catch(Exception e){}  }  public void run(){   while(true){    //接收客户端反馈    byte[] data = receive();    //判断是否是退出    if(isQuit(data)){     break;  //结束循环    }    //逻辑处理    byte[] b = logic(data);    //反馈数据    send(b);   }   close();  }  /**  * 接收客户端数据  * @return 客户端发送的数据  */  private  byte[] receive(){   byte[] b = new byte[1024];   try {    int n = is.read(b);    byte[] data = new byte[n];    //复制有效数据    System.arraycopy(b, 0, data, 0, n);    return data;   } catch (Exception e){}   return null;  }  /**  * 向客户端发送数据  * @param data 数据内容  */  private void send(byte[] data){   try{     os.write(data);   }catch(Exception e){}  }  /**  * 判断是否是quit  * @return 是返回true,否则返回false  */  private boolean isQuit(byte[] data){   if(data == null){     return false;   }else{     String s = new String(data);     if(s.equalsIgnoreCase("quit")){       return true;     }else{       return false;     }   }  }  private byte[] logic(byte[] data){   //反馈数组   byte[] b = new byte[1];   //校验参数   if(data == null){    b[0] = 2;    return b;   }   try{     //转换为数字     String s = new String(data);     int n = Integer.parseInt(s);     //判断是否是质数     if(n >= 2){      boolean flag = isPrime(n);      if(flag){       b[0] = 0;      }else{       b[0] = 1;      }     }else{       b[0] = 2;  //格式错误       System.out.println(n);     }   }catch(Exception e){       e.printStackTrace();       b[0] = 2;   }   return b;  }  /**  *  * @param n  * @return  */  private boolean isPrime(int n){   boolean b = true;   for(int i = 2;i <= Math.sqrt(n);i++){    if(n % i == 0){     b = false;     break;    }   }   return b;  }  /**  * 关闭连接  */  private void close(){   try {     is.close();     os.close();     socket.close();   } catch (Exception e){}  } }

本示例使用的服务器端的结构和前面示例中的结构一致,只是逻辑线程的实现相对来说要复杂一些,在线程类中的logic方法中实现了服务器端逻辑,根据客户端发送过来的数据,判断是否是质数,然后根据判断结果按照协议格式要求,生成客户端反馈数据,实现服务器端要求的功能。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号