随笔-57  评论-170  文章-17  trackbacks-0
  2005年5月18日
      等了好多天,总于等到了。在China-pub和第二书店都有售。地址:
      http://www.china-pub.com/computers/common/info.asp?id=24500
      http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0028982
      期待快递公司快点送过来!
posted @ 2005-05-18 18:21 小米 阅读(203) | 评论 (0)编辑 收藏
      下面是我的一个简单的网络服务器端的程序,程序的流程是监听ACCEPT事件,然后往客户端输出一串字符串。是不是很简单。

package sample.nio;

import java.io.
*;
import java.net.
*;
import java.nio.channels.
*;
import java.util.
*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author George Hill
 * @version 1.0
 
*/


public class Server {

  
private int port;

  
public Server(int port) {
    
this.port = port;
  }


  
public void startServer() throws IOException {
    
// 创建ServerSocketChannel并且绑定到指定的端口
    ServerSocketChannel ssc = ServerSocketChannel.open();
    InetSocketAddress address 
= new InetSocketAddress(InetAddress.getLocalHost(), port);
    ssc.socket().bind(address);
    ssc.configureBlocking(
false);

    
// 创建Selector,并且注册ACCEPT事件
    Selector selector = Selector.open();
    SelectionKey skey 
= ssc.register(selector, SelectionKey.OP_ACCEPT);

    boolean stop 
= false;
    
int n = 0;

    System.
out.println("Server Start");

    
// 轮询
    while (!stop) {
      
// 获取Selector返回的时间值
      n = selector.select();

      
// 当传回的值大于0事,读时间发生了
      if (n > 0{
        Set 
set = selector.selectedKeys();
        Iterator it 
= set.iterator();

        
while (it.hasNext()) {
          skey 
= (SelectionKey) it.next();
          it.remove();

          
if (skey.isAcceptable()) {
            
// 从channel()中取得刚刚注册的Channel
            Socket socket = ((ServerSocketChannel) skey.channel()).accept().socket();

            PrintWriter writer 
= new PrintWriter(socket.getOutputStream(), true);

            
// 将"Hello, World"写入
            writer.write("Hello, World!\n");

            
// 睡眠3秒
            try {
              Thread.sleep(
3000);
            }
 catch (InterruptedException ie) {
            }


            
// 将"EXIT"写入Buffer
            writer.write("EXIT");

            
// 退出程序
            writer.close();
            
// stop = true;
          }

        }

      }

    }


    ssc.close();
    System.
out.println("Server Stop");
  }


  
public static void main(String[] args) throws Exception {
    Server server 
= new Server(5000);
    server.startServer();
  }

}

posted @ 2005-05-18 12:21 小米 阅读(464) | 评论 (0)编辑 收藏
     摘要:       最近在做有关Socket的程序,写了两个客户端程序,第一个客户端程序如下:  1package sample.nio; 2 3import java.io.IOException; 4import java.net.*; 5import&nb...  阅读全文
posted @ 2005-05-18 12:18 小米 阅读(769) | 评论 (0)编辑 收藏

      从JDK1.4开始,SUN提供了JCE包,可以实现多种加密算法。下面是我的一个用JCE进行DES加密解密的程序:

package sample;

import java.security.
*;
import javax.crypto.
*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author George Hill
 * @version 1.0
 
*/


public class Test {
  
  
// 加密使用的Key
  private SecretKey key;
  
  
// 加密算法,JCE可用DES,DESede和Blowfish
  private static final String algorithm = "DES";
  
  
public Test() throws NoSuchAlgorithmException {
    KeyGenerator generator 
= KeyGenerator.getInstance(algorithm);
    key 
= generator.generateKey();
  }

  
  
/**
   * 利用DES算法加密
   * @param s String 需要加密的字符串
   * @return String 加密后的字符串
   * @throws Exception
   
*/

  
public String encryptData(String s) throws Exception {
    Cipher c 
= Cipher.getInstance(algorithm);
    c.init(Cipher.ENCRYPT_MODE, key);

    
return new String(c.doFinal(s.getBytes()));
  }

  
  
/**
   * 利用DES算法解密
   * @param s String 需要解密的字符串
   * @return String 解密后的字符串
   * @throws Exception
   
*/

  
public String decryptData(String s) throws Exception {
    Cipher c 
= Cipher.getInstance(algorithm);
    c.init(Cipher.DECRYPT_MODE, key);

    
return new String(c.doFinal(s.getBytes()));
  }

  
  
/**
   * 测试程序
   * @param args String[]
   * @throws Exception
   
*/

  
public static void main(String[] args) throws Exception {
    String s 
= "Hello";
    Test test 
= new Test();
    String encrypt 
= test.encryptData(s);
    System.
out.println(encrypt);
    String decrypt 
= test.decryptData(encrypt);
    System.
out.println(decrypt);
  }

}



      在实际的使用中,往往需要对加密后的byte数组进行转换,可以自己实现转换,或者用一些第三方的API。
posted @ 2005-05-18 11:55 小米 阅读(837) | 评论 (4)编辑 收藏