java_Socket网络编程

1.简单服务器端
/*
import java.net.*;
import java.io.*;
*/
ServerSocket server=null;
try {
    server=new ServerSocket(%%1);
}catch(Exception e){
    System.out.println("不能监听:"+e.toString());
}
Socket socket=null;
try {
    socket=server.accept();
    BufferedReader %%3=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter %%4=new PrintWriter(socket.getOutputStream());
    String %%2=%%3.readLine();
    %%4.println("");
    %%4.flush();
    %%4.close();
    %%3.close();
}
catch(IOException e){
    System.out.println("出错:"+e.toString());
}finally{
    try {
        if(socket!=null){
            socket.close();
            server.close();
        }
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

2.简单客户端
/*
import java.net.*;
import java.io.*;
*/
Socket socket=null;
try {
    socket=new Socket(%%1,%%2);
    PrintWriter %%3=new PrintWriter(socket.getOutputStream());
    BufferedReader %%4 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    %%3.println("");
    %%3.flush();
    String %%5=%%4.readLine();
    %%6
        %%3.close();
    %%4.close();
}catch(Exception e){
    e.printStackTrace();
}
finally{
    try {
        socket.close();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

3.获得本机IP
//import java.net.*;
String strIP = null;
try     
{     
    strIP =InetAddress.getLocalHost().getHostAddress().toString();   
}
catch(UnknownHostException e)
{
    e.printStackTrace();
}
/*
%%1=InetAddress.getLocalHost().getHostAddress();
Enumeration<NetworkInterface> netInterfaces = null;   
try {   
netInterfaces = NetworkInterface.getNetworkInterfaces();   
while (netInterfaces.hasMoreElements()) {   
NetworkInterface ni = netInterfaces.nextElement();   
System.out.println("DisplayName:" + ni.getDisplayName());   
System.out.println("Name:" + ni.getName());   
Enumeration<InetAddress> ips = ni.getInetAddresses();   
while (ips.hasMoreElements()) {   
System.out.println("IP:" 
+ ips.nextElement().getHostAddress());   
}   
}   
} catch (Exception e) {   
e.printStackTrace();   
}
*/

4.端对端通信
//import java.net.*;
byte[] buf=new byte[1024];
DatagramSocket ds=new DatagramSocket(%%1);
DatagramPacket ip=new DatagramPacket(buf,buf.length);
while(true){
    ds.receive(ip);
}
InetAddress target=InetAddress.getByName(%%2);
DatagramSocket ds=new DatagramSocket(%%3);
String str=%%4;
byte[] buf=str.getBytes();
DatagramPacket op=new DatagramPacket(buf,buf.length,target,%%5);
ds.send(op);
ds.close();

5.点对点通信
/*
import java.io.*;
import java.net.*;
*/
public class %%6 extends Thread {
    @Override
        public void run() {
            ServerSocket server = null;
            try {
                server = new ServerSocket(5000);
            } catch (Exception e) {
                System.out.println("不能监听:" + e.toString());
            }
            Socket socket = null;
            try {
                socket = server.accept();
                BufferedReader req = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
                PrintWriter os = new PrintWriter(socket.getOutputStream());
                Debug.p(req.readLine());
                os.println("Server");
                os.flush();
                os.close();
                req.close();
            } catch (IOException e) {
                System.out.println("出错:" + e.toString());
            } finally {
                try {
                    if (socket != null) {
                        socket.close();
                        server.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    }


    Thread t = new %%6();
    t.start();
    String strIP = null;
    try {
        strIP = InetAddress.getLocalHost().getHostAddress().toString();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    Socket socket = null;
    try {
        socket = new Socket(strIP, 4000);
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(socket
            .getInputStream()));
        pw.println("Client");
        pw.flush();
        Debug.p(br.readLine());
        pw.close();
        br.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6.UDP对时服务器端
/*
import java.io.*;
import java.net.*;
import java.util.*;
*/
public class UDPServer extends Thread {
    @Override
        public void run() {
            String strIP = null;
            try {
                strIP = InetAddress.getLocalHost().toString();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            DatagramSocket ds;
            try {
                ds = new DatagramSocket(5000);
                byte[] buf = new byte[1024];
                DatagramPacket dpt = new DatagramPacket(buf, buf.length);
                ds.receive(dpt);
                String Read_str = new String(buf, 0, dpt.getLength());
                if (Read_str.equals("TimeNow")) {
                    Date t = new Date();
                    byte[] sendData = String.valueOf("cmd date " +(t.getYear()+1900)+"-"+(t.getMonth()+1)+"-"+t.getDate()+" && time "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds()).getBytes();
                    DatagramPacket dp = new DatagramPacket(sendData,
                        sendData.length, InetAddress.getLocalHost(), 2000);
                    ds.send(dp);
                }
                ds.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

    Thread t = new UDPServer();
    t.start();

}

7.UDP对时客户端
/*
import java.io.*;
import java.net.*;
*/
String strIP = null;
try {
    strIP = InetAddress.getLocalHost().getHostAddress().toString();
} catch (UnknownHostException e) {
    e.printStackTrace();
}
byte[] buf = new byte[1024];
DatagramSocket ds;
try {
    ds = new DatagramSocket(2000);
    DatagramPacket ip = new DatagramPacket(buf, buf.length);
    InetAddress target = InetAddress.getByName(strIP);
    String sendData = "TimeNow";
    byte[] buffer = sendData.getBytes();
    DatagramPacket op = new DatagramPacket(buffer, buffer.length,
        target, 5000);
    ds.send(op);
    ds.receive(ip);
    /*
    * 当前时间: 15:38:51.12 输入新时间: 当前日期: 2009-05-26 星期二 输入新日期: (年月日)
    */
    try {
        Runtime.getRuntime().exec(new String(buf, 0, ip.getLength()));
    } catch (IOException e) {
        e.printStackTrace();
    }
    ds.close();
} catch (SocketException e) {
    e.printStackTrace();
} catch (UnknownHostException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

8.点对点传输文件
/*
import   java.io.*;
import   java.net.*;
import   java.util.*;
*/
private   HttpURLConnection   connection;//存储连接   
private   int   downsize   =   -1;//下载文件大小,初始值为-1   
private   int   downed   =   0;//文加已下载大小,初始值为0   
private   RandomAccessFile   savefile;//记录下载信息存储文件   
private   URL   fileurl;//记录要下载文件的地址   
private   DataInputStream   fileStream;//记录下载的数据流
try{   
    /*开始创建下载的存储文件,并初始化值*/   
    File   tempfileobject   =   new   File("h:\webwork-2.1.7.zip");   
    if(!tempfileobject.exists()){   
        /*文件不存在则建立*/   
        tempfileobject.createNewFile();   
    }   
    savefile   =   new   RandomAccessFile(tempfileobject,"rw");   

    /*建立连接*/   
    fileurl   =   new   URL("https://webwork.dev.java.net/files/documents/693/9723/webwork-2.1.7.zip");   
    connection   =   (HttpURLConnection)fileurl.openConnection();   
    connection.setRequestProperty("Range","byte="+this.downed+"-");   

    this.downsize   =   connection.getContentLength();   
    //System.out.println(connection.getContentLength());   

    new   Thread(this).start();   
}   
catch(Exception   e){   
    System.out.println(e.toString());   
    System.out.println("构建器错误");   
    System.exit(0);   
}   
public   void   run(){   
    /*开始下载文件,以下测试非断点续传,下载的文件存在问题*/   
    try{   
        System.out.println("begin!");   
        Date   begintime   =   new   Date();   
        begintime.setTime(new   Date().getTime());   
        byte[]   filebyte;   
        int   onecelen;   
        //System.out.println(this.connection.getInputStream().getClass().getName());   
        this.fileStream   =   new   DataInputStream(   
            new   BufferedInputStream(   
            this.connection.getInputStream()));   
        System.out.println("size   =   "   +   this.downsize);   
        while(this.downsize   !=   this.downed){   
            if(this.downsize   -   this.downed   >   262144){//设置为最大256KB的缓存   
                filebyte   =   new   byte[262144];   
                onecelen   =   262144;   
            }   
            else{   
                filebyte   =   new   byte[this.downsize   -   this.downed];   
                onecelen   =   this.downsize   -   this.downed;   
            }   
            onecelen   =   this.fileStream.read(filebyte,0,onecelen);   
            this.savefile.write(filebyte,0,onecelen);   
            this.downed   +=   onecelen;   
            System.out.println(this.downed);   
        }   
        this.savefile.close();   
        System.out.println("end!");   
        System.out.println(begintime.getTime());   
        System.out.println(new   Date().getTime());   
        System.out.println(begintime.getTime()   -   new   Date().getTime());   
    }   
    catch(Exception e){   
        System.out.println(e.toString());   
        System.out.println("run()方法有问题!");   
    }
}

/***
//FileClient.java
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) throws Exception {

//使用本地文件系统接受网络数据并存为新文件

File file = new File("d:\fmd.doc");

file.createNewFile();

RandomAccessFile raf = new RandomAccessFile(file, "rw");

// 通过Socket连接文件服务器

Socket server = new Socket(InetAddress.getLocalHost(), 3318);
//创建网络接受流接受服务器文件数据
InputStream netIn = server.getInputStream();
InputStream in = new DataInputStream(new BufferedInputStream(netIn));
//创建缓冲区缓冲网络数据

byte[] buf = new byte[2048];

int num = in.read(buf);

while (num != (-1)) {//是否读完所有数据

raf.write(buf, 0, num);//将数据写往文件

raf.skipBytes(num);//顺序写文件字节

num = in.read(buf);//继续从网络中读取文件

}
in.close();
raf.close();
}
}

//FileServer.java
import java.io.*;
import java.util.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) throws Exception {

//创建文件流用来读取文件中的数据

File file = new File("d:\系统特点.doc");

FileInputStream fos = new FileInputStream(file);

//创建网络服务器接受客户请求

ServerSocket ss = new ServerSocket(8801);

Socket client = ss.accept();

//创建网络输出流并提供数据包装器

OutputStream netOut = client.getOutputStream();

OutputStream doc = new DataOutputStream(
new BufferedOutputStream(netOut));

//创建文件读取缓冲区

byte[] buf = new byte[2048];

int num = fos.read(buf);
while (num != (-1)) {//是否读完文件
doc.write(buf, 0, num);//把文件数据写出网络缓冲区
doc.flush();//刷新缓冲区把数据写往客户端
num = fos.read(buf);//继续从文件中读取数据
}
fos.close();
doc.close();
}
}
*/

9.发送邮件
/*
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
*/
public class WebSendMail extends Applet{ 
    // 初始化界面 
    public void init(){ 
        String s = getParameter("BgColor"); 
        if(s == null) 
            s = "0,0,0"; 
        bgcolor = param.decodeColor(s); 
        String s1 = getParameter("FgColor"); 
        if(s1 == null) 
            s1 = "255,255,255"; 
        fgcolor = param.decodeColor(s1); 
        in_mailto = getParameter("MailTo"); 
        if(in_mailto == null) 
            in_mailto = ""; 
        in_website = getParameter("Website"); 
        if(in_website == null) 
            in_website = ""; 
        d = size(); 
        SuperCedeInit(); 
    } 
    public void sendMsg() { // 处理消息发送 
        try { 
            button_Send.disable(); 
            button_Clear.disable(); 
            host = getCodeBase().getHost(); 
            if(host.length() == 0) 
                host = "localhost"; 
            textArea_Log.appendText("Connecting. '" + host + "'
"); 
            Socket socket = new Socket(host, 25); 
            textArea_Log.appendText("Connect OK '" + host + "'
"); 
            // 创建输入输出流 
            DataOutputStream dataoutputstream = new DataOutputStream(socket.getOutputStream()); 
            DataInputStream datainputstream = new DataInputStream(socket.getInputStream()); 
            textArea_Log.appendText("Send Start '" + textField_Subject.getText() + "'
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
"); 
            dataoutputstream.writeBytes("HELO " + host + "
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
"); 
            dataoutputstream.writeBytes("MAIL FROM: " + textField_From.getText() + "
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
"); 
            dataoutputstream.writeBytes("RCPT TO: " + textField_To.getText() + "
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
"); 
            dataoutputstream.writeBytes("DATA
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
"); 
            dataoutputstream.writeBytes("X-Mailer: WebSendMail
"); 
            dataoutputstream.writeBytes("X-WebSite: " + in_website + "
"); 
            dataoutputstream.writeBytes("Subject: " + textField_Subject.getText() + "
" + 
                textArea_Msg.getText() + "
"); 
            dataoutputstream.writeBytes(".
QUIT
"); 
            textArea_Log.appendText(datainputstream.readLine() + "
------------------------------
"); 
            socket.close(); 
            button_Send.enable(); 
            button_Clear.enable(); 
            button_Send.enable(); 
            button_Clear.enable(); 
            return; 
        } 
        catch(UnknownHostException _ex) { 
            // 处理连接异常 
            textArea_Log.appendText("Connect Error '" + host + "'
"); 
            return; 
        } 
        catch(IOException _ex) { 
            button_Send.enable(); 
        } 
        button_Clear.enable(); 
        textArea_Log.appendText("Send Error '" + textField_Subject.getText() + "'
"); 
    } 
    public void paint(Graphics g){} 
    protected void Button_SendClicked(Event event) { 
        // 处理发送按钮点击事件 
        if(textField_From.getText().length() == 0){ 
            // 如果信件来源为空 
            textArea_Log.appendText("Input? 'From'
"); 
            return; 
        } 
        if(textField_To.getText().length() == 0) { 
            // 如果信件目的地为空 
            textArea_Log.appendText("Input? 'To'
"); 
            return; 
        } 
        if(textField_Subject.getText().length() == 0){ 
            // 如果信件主题为空 
            textArea_Log.appendText("Input? 'Subject'
"); 
            return; 
        } 
        if(textArea_Msg.getText().length() == 0) { 
            // 如果信件内容为空 
            textArea_Log.appendText("Input? 'Message'
"); 
            return; 
        } 
        else { 
            sendMsg(); 
            return; 
        } 
    } 
    protected void Button_ClearClicked(Event event) {// 清除按钮点击处理,清空所有已填内容 
        textField_Subject.setText(""); 
        textField_From.setText(""); 
        textField_To.setText(in_mailto); 
        textArea_Msg.setText(""); 
    } 
    protected void Button_ClearLogClicked(Event event) { 
        // 清空日志 
        textArea_Log.setText(""); 
    } 
    // 调用或重载超类相关方法实现初始化、开始、结束以及事件处理等 
    public boolean handleEvent(Event event) { 
        return SuperCedeEvent(event); 
    } 
    public void start() { 
        SuperCedeStart(); 
    } 
    public void stop() { 
        SuperCedeStop(); 
    } 
    public String getAppletInfo() { 
        return "WebSendMail"; 
    } 
    private final void SuperCedeInit() { 
        // 详细的界面设置 
        setLayout(null); 
        setForeground(fgcolor); 
        setBackground(bgcolor); 
        addNotify(); 
        resize(d.width, d.height); 
        label4 = new Label("From :", 2); 
        label4.setForeground(fgcolor); 
        add(label4); 
        int i = insets().left; 
        label4.reshape(i, insets().top, 50, 22); 
        textField_From = new TextField(""); 
        textField_From.setEditable(true); 
        textField_From.setForeground(new Color(0, 0, 0)); 
        textField_From.setBackground(new Color(255, 255, 255)); 
        add(textField_From); 
        int j = insets().left + 50; 
        textField_From.reshape(j, insets().top, d.width - 50, 22); 
        label3 = new Label("To :", 2); 
        label3.setForeground(fgcolor); 
        add(label3); 
        int k = insets().left; 
        label3.reshape(k, insets().top + 22, 50, 22); 
        textField_To = new TextField(in_mailto); 
        textField_To.setEditable(true); 
        textField_To.setForeground(new Color(0, 0, 0)); 
        textField_To.setBackground(new Color(255, 255, 255)); 
        add(textField_To); 
        int l = insets().left + 50; 
        textField_To.reshape(l, insets().top + 22, d.width - 50, 22); 
        label_Subject = new Label("Subject :", 2); 
        label_Subject.setForeground(fgcolor); 
        add(label_Subject); 
        label_Subject.reshape(0, insets().top + 44, 50, 22); 
        textField_Subject = new TextField(""); 
        textField_Subject.setEditable(true); 
        textField_Subject.setForeground(new Color(0, 0, 0)); 
        textField_Subject.setBackground(new Color(255, 255, 255)); 
        add(textField_Subject); 
        int i1 = insets().left + 50; 
        textField_Subject.reshape(i1, insets().top + 44, d.width - 50, 22); 
        textArea_Msg = new TextArea(""); 
        textArea_Msg.setEditable(true); 
        textArea_Msg.setForeground(new Color(0, 0, 0)); 
        textArea_Msg.setBackground(new Color(255, 255, 255)); 
        add(textArea_Msg); 
        textArea_Msg.reshape(0, insets().top + 66, d.width, d.height - 170); 
        textArea_Log = new TextArea(""); 
        textArea_Log.setEditable(true); 
        textArea_Log.setForeground(new Color(0, 0, 0)); 
        textArea_Log.setBackground(new Color(192, 192, 192)); 
        add(textArea_Log); 
        textArea_Log.reshape(0, d.height - 105, d.width, 80); 
        button_Send = new Button("Send"); 
        button_Send.setForeground(new Color(128, 0, 0)); 
        button_Send.setBackground(new Color(192, 192, 192)); 
        add(button_Send); 
        button_Send.reshape(d.width / 2 - 105, d.height - 25, 70, 25); 
        button_Clear = new Button("Clear"); 
        button_Clear.setForeground(new Color(0, 128, 0)); 
        button_Clear.setBackground(new Color(192, 192, 192)); 
        add(button_Clear); 
        button_Clear.reshape(d.width / 2 - 35, d.height - 25, 70, 25); 
        button_ClearLog = new Button("Clear Log"); 
        button_ClearLog.setForeground(new Color(0, 0, 128)); 
        button_ClearLog.setBackground(new Color(192, 192, 192)); 
        add(button_ClearLog); 
        button_ClearLog.reshape(d.width / 2 + 35, d.height - 25, 70, 25); 
        super.init(); 
    } 
    private final boolean SuperCedeEvent(Event event) { 
        if(event.target == button_Send && event.id == 1001) { 
            Button_SendClicked(event); 
            return true; 
        } 
        if(event.target == button_Clear && event.id == 1001) { 
            Button_ClearClicked(event); 
            return true; 
        } 
        if(event.target != button_ClearLog || event.id != 1001) { 
            return super.handleEvent(event); 
        } 
        else { 
            Button_ClearLogClicked(event); 
            return true; 
        } 
    } 
    private final void SuperCedeStart(){} 
    private final void SuperCedeStop() {} 
    public WebSendMail() { // 发送邮件 
        param = new CommonApplet(); 
        in_mailto = null; 
    } 
    // 成员变量 
    Color fgcolor; 
    Color bgcolor; 
    String host; 
    Dimension d; 
    CommonApplet param; 
    String in_mailto; 
    String in_website; 
    Button button_Send; 
    Label label_Subject; 
    Label label3; 
    TextField textField_Subject; 
    TextField textField_From; 
    TextField textField_To; 
    TextArea textArea_Msg; 
    Button button_Clear; 
    Button button_ClearLog; 
    Label label4; 
    TextArea textArea_Log; 
}

10.接收邮件
//activation.jar
// http://d.download.csdn.net/down/398258/dbhunter
//mail.jar
import java.io.*;
import java.text.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class PraseMimeMessage{
    private MimeMessage mimeMessage = null;
    private String saveAttachPath = "";          //附件下载后的存放目录
    private StringBuffer bodytext = new StringBuffer();
    //存放邮件内容的StringBuffer对象
    private String dateformat = "yy-MM-dd HH:mm";    //默认的日前显示格式

    /**
    * 构造函数,初始化一个MimeMessage对象
    */
    public PraseMimeMessage(){}
    public PraseMimeMessage(MimeMessage mimeMessage){
        this.mimeMessage = mimeMessage;
        System.out.println("create a PraseMimeMessage object........");
    }

    public void setMimeMessage(MimeMessage mimeMessage){
        this.mimeMessage = mimeMessage;
    }

    /**
    * 获得发件人的地址和姓名
    */
    public String getFrom()throws Exception{
        InternetAddress address[] = (InternetAddress[])mimeMessage.getFrom();
        String from = address[0].getAddress();
        if(from == null) from="";
        String personal = address[0].getPersonal();
        if(personal == null) personal="";
        String fromaddr = personal+"<"+from+">";
        return fromaddr;
    }
    /**
    * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同
    * "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
    */

    public String getMailAddress(String type)throws Exception{
        String mailaddr = "";
        String addtype = type.toUpperCase();
        InternetAddress []address = null;
        if(addtype.equals("TO") || addtype.equals("CC") ||addtype.equals("BCC")){
            if(addtype.equals("TO")){
                address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO);
            }else if(addtype.equals("CC")){
                address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC);
            }else{
                address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC);
            }
            if(address != null){
                for(int i=0;i<address.length;i++){
                    String email=address[i].getAddress();
                    if(email==null) email="";
                    else{
                        email=MimeUtility.decodeText(email);
                    }
                    String personal=address[i].getPersonal();
                    if(personal==null) personal="";
                    else{
                        personal=MimeUtility.decodeText(personal);
                    }
                    String compositeto=personal+"<"+email+">";
                    mailaddr+=","+compositeto;
                }
                mailaddr=mailaddr.substring(1);
            }
        }else{
            throw new Exception("Error emailaddr type!");
        }
        return mailaddr;
    }

    /**
    * 获得邮件主题
    */

    public String getSubject()throws MessagingException{
        String subject = "";
        try{
            subject = MimeUtility.decodeText(mimeMessage.getSubject());
            if(subject == null) subject="";
        }catch(Exception exce){
        }
        return subject;
    }

    /**
    * 获得邮件发送日期
    */

    public String getSentDate()throws Exception{
        Date sentdate = mimeMessage.getSentDate();
        SimpleDateFormat format = new SimpleDateFormat(dateformat);
        return format.format(sentdate);
    }

    /**
    * 获得邮件正文内容
    */

    public String getBodyText(){
        return bodytext.toString();
    }

    /**
    * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件
    * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
    */

    public void getMailContent(Part part)throws Exception{
        String contenttype = part.getContentType();
        int nameindex = contenttype.indexOf("name");
        boolean conname =false;
        if(nameindex != -1) conname=true;
        System.out.println("CONTENTTYPE: "+contenttype);
        if(part.isMimeType("text/plain") && !conname){
            bodytext.append((String)part.getContent());
        }else if(part.isMimeType("text/html") && !conname){
            bodytext.append((String)part.getContent());
        }else if(part.isMimeType("multipart/*")){
            Multipart multipart = (Multipart)part.getContent();
            int counts = multipart.getCount();
            for(int i=0;i<counts;i++){
                getMailContent(multipart.getBodyPart(i));
            }
        }else if(part.isMimeType("message/rfc822")){
            getMailContent((Part)part.getContent());
        }else{}
    }

    /**
    * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
    */
    public boolean getReplySign()throws MessagingException{
        boolean replysign = false;
        String needreply[] = mimeMessage.getHeader("Disposition-Notification-To");
        if(needreply != null){
            replysign = true;
        }
        return replysign;
    }

    /**
    * 获得此邮件的Message-ID
    */
    public String getMessageId()throws MessagingException{
        return mimeMessage.getMessageID();
    }

    /**
    * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】
    */
    public boolean isNew()throws MessagingException{
        boolean isnew = false;
        Flags flags = ((Message)mimeMessage).getFlags();
        Flags.Flag []flag = flags.getSystemFlags();
        System.out.println("flags's length: "+flag.length);
        for(int i=0;i<flag.length;i++){
            if(flag[i] == Flags.Flag.SEEN){
                isnew=true;
                System.out.println("seen Message.......");
                break;
            }
        }
        return isnew;
    }

    /**
    * 判断此邮件是否包含附件
    */
    public boolean isContainAttach(Part part)throws Exception{
        boolean attachflag = false;
        String contentType = part.getContentType();
        if(part.isMimeType("multipart/*")){
            Multipart mp = (Multipart)part.getContent();
            for(int i=0;i<mp.getCount();i++){
                BodyPart mpart = mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE))))
                    attachflag = true;
                else if(mpart.isMimeType("multipart/*")){
                    attachflag = isContainAttach((Part)mpart);
                }else{
                    String contype = mpart.getContentType();
                    if(contype.toLowerCase().indexOf("application") != -1) attachflag=true;
                    if(contype.toLowerCase().indexOf("name") != -1) attachflag=true;
                }
            }
        }else if(part.isMimeType("message/rfc822")){
            attachflag = isContainAttach((Part)part.getContent());
        }
        return attachflag;
    }

    /**
    * 【保存附件】
    */

    public void saveAttachMent(Part part)throws Exception{
        String fileName = "";
        if(part.isMimeType("multipart/*")){
            Multipart mp = (Multipart)part.getContent();
            for(int i=0;i<mp.getCount();i++){
                BodyPart mpart = mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){
                    fileName = mpart.getFileName();
                    if(fileName.toLowerCase().indexOf("gb2312") != -1){
                        fileName = MimeUtility.decodeText(fileName);
                    }
                    saveFile(fileName,mpart.getInputStream());
                }else if(mpart.isMimeType("multipart/*")){
                    saveAttachMent(mpart);
                }else{
                    fileName = mpart.getFileName();
                    if((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") != -1)){
                        fileName=MimeUtility.decodeText(fileName);
                        saveFile(fileName,mpart.getInputStream());
                    }
                }
            }
        }else if(part.isMimeType("message/rfc822")){
            saveAttachMent((Part)part.getContent());
        }
    }

    /**
    * 【设置附件存放路径】
    */

    public void setAttachPath(String attachpath){
        this.saveAttachPath = attachpath;
    }

    /**
    * 【设置日期显示格式】
    */

    public void setDateFormat(String format)throws Exception{
        this.dateformat = format;
    }

    /**
    * 【获得附件存放路径】
    */

    public String getAttachPath(){
        return saveAttachPath;
    }

    /**
    * 【真正的保存附件到指定目录里】
    */

    private void saveFile(String fileName,InputStream in)throws Exception{
        String osName = System.getProperty("os.name");
        String storedir = getAttachPath();
        String separator = "";
        if(osName == null) osName="";
        if(osName.toLowerCase().indexOf("win") != -1){
            separator = "\"
                if(storedir == null || storedir.equals("")) storedir="c:\tmp";
        }else{
            separator = "/";
            storedir = "/tmp";
        }
        File storefile = new File(storedir+separator+fileName);
        System.out.println("storefile's path: "+storefile.toString());
        //for(int i=0;storefile.exists();i++){
        //storefile = new File(storedir+separator+fileName+i);
        //}
        BufferedOutputStream bos = null;
        BufferedInputStream bis = null;

        try{
            bos = new BufferedOutputStream(new FileOutputStream(storefile));
            bis = new BufferedInputStream(in);
            int c;
            while((c=bis.read()) != -1){
                bos.write(c);
                bos.flush();
            }
        }catch(Exception exception){
            exception.printStackTrace();
            throw new Exception("文件保存失败!");
        }finally{
            bos.close();
            bis.close();
        }
    }

    /**
    * PraseMimeMessage类测试
    */

    public static void main(String args[])throws Exception{
        String host = "主机名/ip";     //【pop.mail.yahoo.com.cn】
        String username ="用户名";     //【wwp_1124】
        String password ="密码";       //【........】
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("pop3");
        store.connect(host, username, password);
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        Message message[] = folder.getMessages();
        System.out.println("Messages's length: "+message.length);
        PraseMimeMessage pmm = null;
        for(int i=0;i<message.length;i++){
            pmm = new PraseMimeMessage((MimeMessage)message[i]);
            System.out.println("Message "+i+" subject: "+pmm.getSubject());
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());
            System.out.println("Message "+i+" replysign: "+pmm.getReplySign());
            System.out.println("Message "+i+" hasRead: "+pmm.isNew());
            System.out.println("Message "+i+" containAttachment: "+pmm.isContainAttach((Part)message[i]));
            System.out.println("Message "+i+" form: "+pmm.getFrom());
            System.out.println("Message "+i+" to: "+pmm.getMailAddress("to"));
            System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc"));
            System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc"));
            pmm.setDateFormat("yy年MM月dd日 HH:mm");
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());
            System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId());
            pmm.getMailContent((Part)message[i]);
            System.out.println("Message "+i+" bodycontent: 
"+pmm.getBodyText());
            pmm.setAttachPath("c:\tmp\coffeecat1124");
            pmm.saveAttachMent((Part)message[i]);
        }
    }
}

11.多线程阻塞通信

12.多线程非阻塞通信

13.多线程文件断点续传

14.多线程多文件断点续传

15.截取屏幕
import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.sql.*;
/** *//*******************************************************************
      * 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照"
      * This JavaBean is used to snapshot the GUI in a
      * Java application! You can embeded
      * it in to your java application source code, and us
      * it to snapshot the right GUI of the application
      * @see javax.ImageIO
      * @author liluqun ([email]liluqun@263.net[/email])
      * @version 1.0
      *
      *****************************************************/
public class GuiCamera ...{
    private String fileName; //文件的前缀

    private String defaultName = "GuiCamera";

    static int serialNum = 0;

    private String imageFormat; //图像文件的格式

    private String defaultImageFormat = "jpg";

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    /** *//****************************************************************
          * 默认的文件前缀为GuiCamera,文件格式为PNG格式
          * The default construct will use the default
          * Image file surname "GuiCamera",
          * and default image format "png"
          ****************************************************************/
    public GuiCamera() ...{
        fileName = defaultName;
        imageFormat = defaultImageFormat;

    }

    /** *//****************************************************************
          * @param s the surname of the snapshot file
          * @param format the format of the  image file,
          * it can be "jpg" or "png"
          * 本构造支持JPG和PNG文件的存储
          ****************************************************************/
    public GuiCamera(String s, String format) ...{

        fileName = s;
        imageFormat = format;
    }

    /** *//****************************************************************
          * 对屏幕进行拍照
          * snapShot the Gui once
          ****************************************************************/
    public void snapShot() ...{

        try ...{
            //拷贝屏幕到一个BufferedImage对象screenshot
            BufferedImage screenshot = (new Robot())
                .createScreenCapture(new Rectangle(0, 0,
                (int) d.getWidth(), (int) d.getHeight()));
            serialNum++;
            //根据文件前缀变量和文件格式变量,自动生成文件名
            String name = fileName + String.valueOf(serialNum) + "."
                + imageFormat;
            File f = new File(name);
            System.out.print("Save File " + name);
            //将screenshot对象写入图像文件
            ImageIO.write(screenshot, imageFormat, f);
            System.out.print("..Finished! ");
        } catch (Exception ex) ...{
            System.out.println(ex);
        }
    }

    public static void main(String[] args) ...{
        System.out.print("打开连接");
        GuiCamera cam = new GuiCamera("d:Hello", "jpg");//

        cam.snapShot();
    }
}

16.聊天室服务器端逻辑
//Debug.java
import java.util.*;

public class Debug {
    public static String p(String s) {
        System.out.println(s);
        return s;
    }

    public static Object p(Object O) {
        System.out.println(O.toString());
        return O;
    }

    public static Object[] p(Object[] O) {
        System.out.print("[");
        String s = "";
        for (Object o : O) {
            System.out.print(s);
            System.out.print(o.toString());
            s = ",";
        }
        System.out.println("]");
        return O;
    }

    public static boolean p(boolean b) {
        System.out.println(b);
        return b;
    }

    public static int p(int i) {
        System.out.println(i);
        return i;
    }

    public static long p(long i) {
        System.out.println(i);
        return i;
    }

    @SuppressWarnings("unchecked")
        public static Map.Entry p(Map.Entry l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static HashSet p(HashSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static HashMap p(HashMap l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static Map p(Map l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static LinkedHashSet p(LinkedHashSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static TreeSet p(TreeSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static Set p(Set l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static ArrayList p(ArrayList l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static LinkedList p(LinkedList l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static List p(List l) {
            System.out.println(l);
            return l;
    }
}

//Service.java
import java.io.*;
import java.net.*;
import java.util.*;
public class Service extends Thread{
    private Socket client=null;
    private Server server=null;
    public Service(Server server,Socket client){
        this.server=server;
        this.client=client;
    }
    public void run(){
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
            while(true){
                String str=br.readLine();
                List<Socket> li=server.getLi();
                for(Socket c:li){
                    if(!c.isClosed() && c.isConnected()){
                        OutputStream os=c.getOutputStream();
                        os.write((str+"
").getBytes());
                    }else{
                        client.close();
                        server.getLi().remove(client);
                        break;
                    }
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//Server.java
import java.util.*;
import java.io.*;
import java.net.*;
public class Server {
    private List<Socket> li=new ArrayList<Socket>();
    private ServerSocket ss=null;
    public List<Socket> getLi(){
        return li;
    }
    public Server(int port){
        try {
            ss=new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void start(){
        while(true){
            Socket s;
            try {
                s = ss.accept();
                li.add(s);
                new Service(this,s).start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Server(8888).start();
    }
}

17.聊天室客户端逻辑
//Debug.java
import java.util.*;
public class Debug {
    public static String p(String s) {
        System.out.println(s);
        return s;
    }

    public static Object p(Object O) {
        System.out.println(O.toString());
        return O;
    }

    public static Object[] p(Object[] O) {
        System.out.print("[");
        String s = "";
        for (Object o : O) {
            System.out.print(s);
            System.out.print(o.toString());
            s = ",";
        }
        System.out.println("]");
        return O;
    }

    public static boolean p(boolean b) {
        System.out.println(b);
        return b;
    }

    public static int p(int i) {
        System.out.println(i);
        return i;
    }

    public static long p(long i) {
        System.out.println(i);
        return i;
    }

    @SuppressWarnings("unchecked")
        public static Map.Entry p(Map.Entry l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static HashSet p(HashSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static HashMap p(HashMap l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static Map p(Map l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static LinkedHashSet p(LinkedHashSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static TreeSet p(TreeSet l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static Set p(Set l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static ArrayList p(ArrayList l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static LinkedList p(LinkedList l) {
            System.out.println(l);
            return l;
    }

    @SuppressWarnings("unchecked")
        public static List p(List l) {
            System.out.println(l);
            return l;
    }
}

//GetMessage.java
import javax.swing.*;
import java.io.*;
import java.net.*;
public class GetMessage extends Thread{
    private JTextArea context=null;
    private Socket s=null;
    public GetMessage(JTextArea context,Socket s){
        this.context=context;
        this.s=s;
    }
    public void run(){
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
            while(true){
                String str=br.readLine();
                String c=context.getText();
                context.setText(c+"
"+str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//Client.java
package t3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Client extends JFrame {
    private static final long serialVersionUID = 1L;
    private String ip = "";
    private int port = 0;
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    private Socket s = null;
    private JTextArea context = new JTextArea(10, 10);
    JScrollPane sp = new JScrollPane(context);
    private JTextField say = new JTextField(10);
    private Container c;
    public Client() {
        c = this.getContentPane();
        c.setLayout(new BorderLayout());
        context.setEditable(false);
        c.add(sp);
        JPanel p = new JPanel();
        p.add(BorderLayout.CENTER, say);
        c.add(BorderLayout.SOUTH, p);
        try {
            s = new Socket(this.ip, this.port);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        say.addActionListener(new ActionListener() {
            private void send(String str) {
                try {
                    OutputStream os = s.getOutputStream();
                    os.write(str.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            public void actionPerformed(ActionEvent arg0) {
                String str = say.getText();
                send(str + "
");
                say.setText("");
            }
        });
        new GetMessage(context, s).start();
        this.setSize(300, 300);
        this.setVisible(true);
        this.setResizable(false);
    }
    public Client(String ip, int port) {
        c = this.getContentPane();
        c.setLayout(new BorderLayout());
        context.setEditable(false);
        c.add(sp);
        JPanel p = new JPanel();
        p.add(BorderLayout.CENTER, say);
        c.add(BorderLayout.SOUTH, p);
        try {
            s = new Socket(ip, port);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        say.addActionListener(new ActionListener() {
            private void send(String str) {
                try {
                    OutputStream os = s.getOutputStream();
                    os.write(str.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            public void actionPerformed(ActionEvent arg0) {
                String str = say.getText();
                send(str + "
");
                say.setText("");
            }
        });
        new GetMessage(context, s).start();
        this.setSize(300, 300);
        this.setVisible(true);
        this.setResizable(false);
    }
    public static void main(String[] args) {
        String strIP = null;
        try {
            strIP = InetAddress.getLocalHost().getHostAddress().toString();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        new Client(strIP, 8888); // "127.0.0.1"
    }
}

18.克隆对象
class  Student implements Cloneable{
    String name;
    int age;
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    public boolean equals(Object s) {
        Student s1=(Student)s;
        if(this.name.equals(s1.name)&&this.age==s1.age)
            return true;
        else 
            return false;
    }
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }    
}
//throws CloneNotSupportedException {
Student s1=new Student("张三",20);
Student s2=(Student)s1.clone();
if(s1==s2){
    System.out.println("s1 and s2 are same object!");
}else{
    System.out.println("s1 and s2 are NOT same object!");
}
if(s1.equals(s2)){
    System.out.println("s1 and s2 are equals!");
}else{
    System.out.println("s1 and s2 are NOT equals!");
}

19.XML属性文件解析
/*
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
throws ParserConfigurationException, SAXException, IOException {
*/
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(%%1); //"mybook.xml"
doc.normalize();
NodeList nl=doc.getElementsByTagName("book");
for(int i=0;i<nl.getLength();i++){
    Element e=(Element)nl.item(i);
    String title=e.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
    String author=e.getElementsByTagName("author").item(0).getFirstChild().getNodeValue();
    String price=e.getElementsByTagName("price").item(0).getFirstChild().getNodeValue();
    System.out.println("title:"+title);
    System.out.println("author:"+author);
    System.out.println("price:"+price);
}
<!-- 
读取XML配置文件
/*
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
*/
try {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    db = dbf.newDocumentBuilder();
    Document doc;
    doc = db.parse("config.xml");
    doc.normalize();
    NodeList nl = doc.getElementsByTagName("book");
    for (int i = 0; i < nl.getLength(); i++) {
        Element e = (Element) nl.item(i);
        String strurl = e.getElementsByTagName("dbsource").item(0)
            .getFirstChild().getNodeValue();
        String username;
        if (e.getElementsByTagName("username").item(0).getFirstChild() == null) {
            username = "";
        } else {
            username = e.getElementsByTagName("username").item(0)
                .getFirstChild().getNodeValue();
        }
        String password;
        if (e.getElementsByTagName("username").item(0).getFirstChild() == null) {
            password = "";
        } else {
            password = e.getElementsByTagName("password").item(0)
                .getFirstChild().getNodeValue();
        }
        // strurl
        // username
        // password
    }
} catch (ParserConfigurationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
} catch (SAXException e2) {
    // TODO Auto-generated catch block
    e2.printStackTrace();
} catch (IOException e3) {
    // TODO Auto-generated catch block
    e3.printStackTrace();
}
-->

20.XML属性文件构造
/*
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
throws ParserConfigurationException, SAXException, IOException {
*/
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(%%1); //"mybook.xml"
doc.normalize();
NodeList nl=doc.getElementsByTagName("book");
for(int i=0;i<nl.getLength();i++){
    Element e=(Element)nl.item(i);
    String title=e.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
    String author=e.getElementsByTagName("author").item(0).getFirstChild().getNodeValue();
    String price=e.getElementsByTagName("price").item(0).getFirstChild().getNodeValue();
    System.out.println("title:"+title);
    System.out.println("author:"+author);
    System.out.println("price:"+price);
}

21.XML文件节点遍历操作
/*
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
*/
private DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
private DocumentBuilder builder;
private Document doc;
private Element element;

public Dead() {
    try {
        builder = factory.newDocumentBuilder();
        doc = builder.parse("Produces.xml");
        element = doc.getDocumentElement();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void findAll(NodeList lin) {
    for (int i = 0; i < lin.getLength(); i++) {
        Node node = lin.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            System.out.println(node.getNodeName());
            if (!node.getFirstChild().getNodeValue().trim().equals("")) {
                System.out.println(node.getFirstChild().getNodeValue());
            }
        }
        NamedNodeMap atts = node.getAttributes();
        if (atts != null) {
            for (int j = 0; j < atts.getLength(); j++) {
                Node attNode = atts.item(j);
                if (attNode.getNodeType() == Node.ATTRIBUTE_NODE) {
                    System.out.println(attNode.getNodeName() + ":"
                        + attNode.getNodeValue());// 循环某个节点下的所有属性
                }
            }
        }
        findAll(node.getChildNodes());
    }
}

NodeList lin = element.getChildNodes();
this.findAll(lin);

22.XML文件节点遍历查找
/*
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
*/
public class sax extends DefaultHandler{
    String str;
    public sax() {
        super();
    }
    public void startDocument() throws SAXException {
        System.out.println("商品列表");
    }
    //名称空间,本地名称,标签名称(没有名空的话有值),
    public void startElement(String arg0, String arg1, String arg2,
        Attributes arg3) throws SAXException {
            if(arg2.equals("product")){
                System.out.println(arg3.getValue(0));
            }
    }
    //遇到内容时触发
    public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
        str=new String(arg0,arg1,arg2);
    }
    //结束
    public void endElement(String arg0, String arg1, String arg2)
        throws SAXException {
            if(arg2.equals("name")){
                System.out.println("name:"+str);
            }else if(arg2.equals("authar")){
                System.out.println("authar:"+str);
            }else if(arg2.equals("price")){
                System.out.println("price:"+str);
            }
    }
    public static void main(String[] args) {
        SAXParserFactory factory=SAXParserFactory.newInstance();
        try {
            javax.xml.parsers.SAXParser parser=factory.newSAXParser();
            sax a3=new sax();
            parser.parse(new InputSource(%%1),a3); //"bin/preducts.xml"
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

23.多线程端口监听
/*
import java.io.*;
import java.net.*;
import java.util.regex.*;
import com.sun.net.httpserver.*;
import com.sun.net.httpserver.spi.*;
*/
public class HTTPDownloadService {
    /**
    * @param args
    * @throws IOException
    */1.  public static void main(String[] args) throws IOException {
        HttpServerProvider httpServerProvider = HttpServerProvider.provider();
        int port = 60080;
        if (args.length > 0) {
            try {
                port = Integer.parseInt(args[0]);
            } catch (Exception ex) {}
        }
        // 绑定端口1.    InetSocketAddress addr = new InetSocketAddress(port);
        HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
        httpServer.createContext("/", new HTTPDownloaderServiceHandler());
        httpServer.setExecutor(null);
        httpServer.start();
        System.out.println("started");
}
}
/**
* 下载的服务器
* 
* @author 赵学庆 www.java2000.net
*/class HTTPDownloaderServiceHandler implements HttpHandler {
    private static Pattern p = Pattern.compile("\?page=(.*?)\&rpage=(.*?)&savepath=(.*)$");
    public void handle(HttpExchange httpExchange) {
        try {
            Matcher m = p.matcher(httpExchange.getRequestURI().toString());
            String response = "OK";
            if (m.find()) {
                try {
                    new HTTPDownloader(URLDecoder.decode(m.group(1), "GBK"), URLDecoder.decode(m.group(2), "GBK"), URLDecoder.decode(m.group(3), "GBK"), 10).start();
                } catch (Exception e) {
                    response = "ERROR -1";
                    e.printStackTrace();
                }
            } else {
                response = "ERROR 1";
            }
            httpExchange.sendResponseHeaders(200, response.getBytes().length);
            OutputStream out = httpExchange.getResponseBody();
            out.write(response.getBytes());
            out.close();
            httpExchange.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

24.多线程端口扫描
/*
import java.io.*;
import java.net.*;
*/
int Thread_Num=50;                       //设置默认线程数50
String host="localhost";
int minPort;
int maxPort;
int portNum;

ScanPort sp[]=new ScanPort[Thread_Num];

minPort=Integer.parseInt(args[1]);
maxPort=Integer.parseInt(args[2]);

if(args.length == 3 && minPort<maxPort)
{
    host=args[0];
    minPort=Integer.parseInt(args[1]);
    maxPort=Integer.parseInt(args[2]);
    InetAddress thisComputer;
    byte[] address;

    //获取IP地址的字节
    try
    {
        thisComputer=InetAddress.getByName(host);
        address=thisComputer.getAddress();
    }

    catch(UnknownHostException e)
    {
        System.out.println("Cannot find host"+host);
    }
}

if (args.length == 4 && minPort<maxPort)
{
    host=args[0];
    minPort=Integer.parseInt(args[1]);
    maxPort=Integer.parseInt(args[2]);
    Thread_Num=Integer.parseInt(args[3]);    //自定义线程数
    InetAddress thisComputer;
    byte[] address;

    //获取IP地址的字节
    try
    {
        thisComputer=InetAddress.getByName(host);
        address=thisComputer.getAddress();
    }

    catch(UnknownHostException e)
    {
        System.out.println("Cannot find host"+host);
    }
}

//--- 计算待扫瞄端口量 ---//
portNum=maxPort-minPort+1;
if(portNum < Thread_Num)
{
    //--- 如果端口数小于总线程 ---//
    for(int i=0; i<portNum; i++)
    {
        sp[i]=new ScanPort(host,minPort+i,minPort+i,i);
        sp[i].start();
    }
}
else
{
    int startPort = minPort, endPort = minPort;
    int A = portNum / Thread_Num ;
    int B = portNum % Thread_Num;

    for(int i=0; i<Thread_Num; i++)
    {
        if(B <= Thread_Num)
        {
            startPort = endPort;
            if ( i!= 0)
            {
                startPort += 1;
                endPort = startPort + A -1;
            }

            if ( i < B)
                endPort += 1;

            sp[i]=new ScanPort(host,startPort,endPort,i);
            sp[i].start();
        }
        else
        {
            System.out.println("b大于50");
        }
    }
}

try
{
loop:
    while(true)
    {
        for(int i=0; i<Thread_Num; i++)
            if(sp[i].isAlive())
                continue loop;
        break;
    }
}
catch(NullPointerException e)
{
    System.out.println(e.toString());
}

class ScanPort extends Thread
{
    //--- 分别定义目标,开始端口,结束端口,线程标记 ---//
    private String host;
    private int sPort;
    private int ePort;
    private int tag;
    private int i;

    //--- 构造函数(重新构造端口) ---//
    ScanPort(String h, int sP, int eP, int t)
    {
        super();
        host=h;
        sPort=sP;
        ePort=eP;
        tag=t;
    }
    public void run()
    {
        //--- 测试端口是否打开 ---//
        for(i=sPort; i<=ePort; i++)
        {
            try
            {
                Socket s = new Socket(host, i);
                System.out.println("Host:"+host+" Port: "+i+" is Opening."+tag+"线程");
                FileOutputStream out1=new FileOutputStream("C:
eport.txt",true);
                BufferedOutputStream out2=new BufferedOutputStream(out1);
                DataOutputStream out=new DataOutputStream(out2);
                out.writeChars("Host:"+host+" Port:"+i+" is Opening."+tag+" Threads"+"n");
                out.close();
                Thread.yield();
            }

            catch(IOException e)
            {
                System.out.println("Host:"+host+" Port: "+i+" is Closed."+tag+"线程");
            }
        }
    }
}

25.发送带附件的邮件
/*
import java.io.*;
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
*/
private MimeMessage mimeMsg;
private Session session;
private Properties props;
private boolean needAuth;
private String username;
private String password;
private Multipart mp;

public SendAdditionMail()
{
    needAuth = true;
    username = "ccue_yuanqichao";
    password = "lianhuanccue";
    setSmtpHost("smtp.sina.com.cn");
    createMimeMessage();
}

public SendAdditionMail(String smtp)
{
    needAuth = true;
    username = "ccue_yuanqichao";
    password = "lianhuanccue";
    setSmtpHost(smtp);
    createMimeMessage();
}

public void setSmtpHost(String hostName)
{
    System.out.println("设置系统属性:mail.smtp.host = " + hostName);
    if (props == null)
        props = System.getProperties();
    props.put("mail.smtp.host", hostName);
}

public boolean createMimeMessage()
{
    try
    {
        System.out.println("准备获取邮件会话对象!");
        session = Session.getDefaultInstance(props, null);
    }
    catch (Exception e)
    {
        System.err.println("获取邮件会话对象时发生错误!" + e);
        return false;
    }
    System.out.println("准备创建MIME邮件对象!");
    try
    {
        mimeMsg = new MimeMessage(session);
        mp = new MimeMultipart();
        return true;
    }
    catch (Exception e)
    {
        System.err.println("创建MIME邮件对象失败!" + e);
    }
    return false;
}

public void setNeedAuth(boolean need)
{
    System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
    if (props == null)
        props = System.getProperties();
    if (need)
        props.put("mail.smtp.auth", "true");
    else
        props.put("mail.smtp.auth", "false");
}

public void setNamePass(String name, String pass)
{
    username = name;
    password = pass;
}

public boolean setSubject(String mailSubject)
{
    System.out.println("设置邮件主题!");
    try
    {
        mimeMsg.setSubject(mailSubject);
        return true;
    }
    catch (Exception e)
    {
        System.err.println("设置邮件主题发生错误!");
    }
    return false;
}

public boolean setBody(String mailBody)
{
    try
    {
        BodyPart bp = new MimeBodyPart();
        bp.setContent("" + mailBody, "text/html;charset=GB2312");
        mp.addBodyPart(bp);
        return true;
    }
    catch (Exception e)
    {
        System.err.println("设置邮件正文时发生错误!" + e);
    }
    return false;
}

public boolean addFileAffix(String filename)
{
    System.out.println("增加邮件附件:" + filename);
    try
    {
        BodyPart bp = new MimeBodyPart();
        FileDataSource fileds = new FileDataSource(filename);
        bp.setDataHandler(new DataHandler(fileds));
        bp.setFileName(fileds.getName());
        mp.addBodyPart(bp);
        return true;
    }
    catch (Exception e)
    {
        System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
    }
    return false;
}

public boolean setFrom(String from)
{
    System.out.println("设置发信人!");
    try
    {
        mimeMsg.setFrom(new InternetAddress(from));
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

public boolean setTo(String to)
{
    if (to == null)
        return false;
    try
    {
        mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to));
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

public boolean setCopyTo(String copyto)
{
    if (copyto == null)
        return false;
    try
    {
        mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto));
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

public boolean sendout()
{
    try
    {
        mimeMsg.setContent(mp);
        mimeMsg.saveChanges();
        System.out.println("正在发送邮件....");
        Session mailSession = Session.getInstance(props, null);
        Transport transport = mailSession.getTransport("smtp");
        transport.connect((String)props.get("mail.smtp.host"), username, password);
        transport.sendMessage(mimeMsg, mimeMsg.getRecipients(javax.mail.Message.RecipientType.TO));
        System.out.println("发送邮件成功!");
        transport.close();
        return true;
    }
    catch (Exception e)
    {
        System.err.println("邮件发送失败!" + e);
    }
    return false;
}

String mailbody = " 

java php asp.net编程欢迎您的加入!
";
SendAdditionMail themail = new SendAdditionMail("smtp.sina.com.cn");
themail.setNeedAuth(true);
if (!themail.setSubject("TEST"))
return;
StringUtil su = new StringUtil();
if (!themail.setBody(su.getUserEmailText("1", "test", "test")))
return;
if (!themail.setTo("test@sina.com"))
return;
if (!themail.setFrom("ccue_yuanqichao@sina.com"))
return;
if (!themail.addFileAffix("E:\img\183977.jpg"))
return;
if (!themail.sendout())
return;
else
return;

26.接收带附件的邮件
/*
import java.io.*;
import java.text.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
*/
/**
* @author Administrator
*
*/
public class PraseMimeMessage{
    private MimeMessage mimeMessage = null;
    private String saveAttachPath ="";//附件下载后的存放目录

    private StringBuffer bodytext = new StringBuffer();
    //存放邮件内容的StringBuffer对象
    private String dateformat = "yy-MM-dd HH:mm";//默认的日前显示格式

    /**
     * 构造函数,初始化一个MimeMessage对象
      */
    public PraseMimeMessage(){}
    public PraseMimeMessage(MimeMessage mimeMessage){
        this.mimeMessage = mimeMessage;
        System.out.println("create a PraseMimeMessage object........");
    }

    public void setMimeMessage(MimeMessage mimeMessage){
        this.mimeMessage=mimeMessage;
    }

    /**
    * 
    * 获取发件人的姓名和密码
    * @return 
    */
    public   String getFrom()throws Exception{
        InternetAddress address[] = (InternetAddress[])mimeMessage.getFrom();
        String from = address[0].getAddress();
        if(from == null) from="";
        String personal = address[0].getPersonal();
        if(personal == null) personal="";
        String fromaddr =personal+"<"+from+">";
        return fromaddr;
    }
    /**
     * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同
      * "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
       */

    public String getMailAddress(String type)throws Exception{
        String mailaddr ="";
        String addtype = type.toUpperCase();
        InternetAddress []address = null;
        if(addtype.equals("TO")|| addtype.equals("CC") ||addtype.equals("BCC"))

        {if(addtype.equals("TO")){
            address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO);
        }else if(addtype.equals("CC")){
            address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC);
        }else{
            address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC);
        }
        if(address!=null){
            for(int i=0;i<address.length;i++){
                String email=address[i].getAddress();
                if(email==null) email="";
                else{
                    email=MimeUtility.decodeText(email);
                }
                String personal=address[i].getPersonal();
                if(personal==null) personal="";
                else{
                    personal=MimeUtility.decodeText(personal);
                }
                String compositeto=personal+"<"+email+">";
                mailaddr+=","+compositeto;
            }
            mailaddr=mailaddr.substring(1);
        }
        }else{
            throw new Exception("Error emailaddr type!");
        }
        return   mailaddr;
    }


    /**
    * 
    * 获取邮件主题
    */
    public String getSubject()throws MessagingException{
        String subject = "";
        try{
            subject = MimeUtility.decodeText(mimeMessage.getSubject());
            if(subject == null) subject="";
        }catch(Exception exce){
        }
        return subject;
    }
    /*
    * 获取邮件发送日期
    * 
    */

    public String getSentDate()throws Exception{
        Date sentdate = mimeMessage.getSentDate();
        SimpleDateFormat format = new SimpleDateFormat(dateformat);
        return format.format(sentdate);
    }

    /**
    * 获取邮件正文
    * @return 
    * 
    */

    public String getBodyText(){
        return bodytext.toString();
    }

    /**
    * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件
    *   主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
    * 
    * 
    */

    public void getMailContent(Part part)throws Exception{
        String contenttype = part.getContentType();
        int nameindex = contenttype.indexOf("name");
        boolean conname =false;
        if(nameindex !=-1) conname=true;
        System.out.println("CONTENTTYPE: "+contenttype);
        if(part.isMimeType("text/plain") && !conname){
            bodytext.append((String)part.getContent());
        }else if(part.isMimeType("text/html") && !conname){
            bodytext.append((String)part.getContent());
        }else if(part.isMimeType("multipart/*")){
            Multipart multipart =(Multipart)part.getContent();
            int counts = multipart.getCount();
            for(int i=0;i<counts;i++){
                getMailContent(multipart.getBodyPart(i));
            }
        }else if(part.isMimeType("message/rfc822")){
            getMailContent((Part)part.getContent());
        }else{}
    }

    /**
    * 
    * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
    * 
    */




    public boolean getReplySign()throws MessagingException{
        boolean replysign = false;
        String needreply[] =   mimeMessage.getHeader("Disposition-Notification-To");
        if(needreply != null){
            replysign=true;
        }
        return replysign;
    }
    /*
    * 获得此邮件的Message-ID
    * 
    */

    public String getMessageId()throws MessagingException{
        return mimeMessage.getMessageID();
    }
    /*
    * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】
    * 
    */

    public boolean isNew()throws MessagingException{
        boolean isnew = false;
        Flags flags = ((Message)mimeMessage).getFlags();
        Flags.Flag []flag = flags.getSystemFlags();
        System.out.println("flags's length: "+flag.length);
        for(int i=0;i<flag.length;i++){
            if(flag[i] == Flags.Flag.SEEN){
                isnew=true;
                System.out.println("seen Message.......");
                break;}
        }
        return isnew;
    }

    /**
    * 
    * 判断此邮件是否包含附件
    * 
    */

    public boolean isContainAttach(Part part)throws Exception{
        boolean attachflag = false;
        String contentType = part.getContentType();
        if(part.isMimeType("multipart/*")){
            Multipart mp = (Multipart)part.getContent();
            for(int i=0;i<mp.getCount();i++){
                BodyPart mpart = mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE))))
                    attachflag = true;
                else if(mpart.isMimeType("multipart/*")){
                    attachflag = isContainAttach((Part)mpart);
                }else{
                    String contype = mpart.getContentType();
                    if(contype.toLowerCase().indexOf("application")!= -1) attachflag=true;
                    if(contype.toLowerCase().indexOf("name") != -1) attachflag=true;
                }
            }
        }else if(part.isMimeType("message/rfc822")){
            attachflag = isContainAttach((Part)part.getContent());
        }
        return attachflag;
    }

    /*
    * 保存附件
    * 
    */
    public void saveAttachMent(Part part)throws Exception{
        String fileName="";
        if(part.isMimeType("multipart/*")){
            Multipart mp=(Multipart)part.getContent();
            for(int i=0;i<mp.getCount();i++){
                BodyPart mpart =mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){
                    fileName = mpart.getFileName();
                    if(fileName.toLowerCase().indexOf("gb2312")!=-1){
                        fileName = MimeUtility.decodeText(fileName);
                    }
                    //saveFile(fileName,mpart.getInputStream());
                    saveFile(fileName,mpart.getInputStream());

                }else if(mpart.isMimeType("multipart/*")){
                    saveAttachMent(mpart);
                }else{
                    fileName = mpart.getFileName();
                    if((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") !=-1)){
                        fileName=MimeUtility.decodeText(fileName);
                        saveFile(fileName,mpart.getInputStream());
                    }
                }
            }
        }else if(part.isMimeType("message/rfc822")){
            saveAttachMent((Part)part.getContent());
        }
    }

    /**
     * 【设置附件存放路径】
      */

    public void setAttachPath(String attachpath){
        this.saveAttachPath = attachpath;
    }

    /**
    * 
    * 设置日期显示本格式
    */
    public void setDateFormat(String format)throws Exception{
        this.dateformat = format;
    }

    /**
     * 【获得附件存放路径】
      */

    public String getAttachPath(){
        return saveAttachPath;
    }

    /**
     * 【真正的保存附件到指定目录里】
      */

    private void saveFile(String fileName,InputStream in)throws Exception{

        String osName = System.getProperty("os.name"); 
        String storedir = getAttachPath();
        String separator = "";
        if(osName == null) osName="";
        if(osName.toLowerCase().indexOf("win") != -1){
            separator="\";
            if(storedir == null || storedir.equals("")) storedir="c:\tmp";
        }else{
            separator ="/";
            storedir = "/tmp";
        }
        File storefile = new File(storedir+separator+fileName);
        System.out.println("storefile's path: "+storefile.toString());


        BufferedOutputStream bos = null;
        BufferedInputStream bis = null;
        try{
            bos = new BufferedOutputStream(new FileOutputStream(storefile));
            bis = new BufferedInputStream(in);
            int c;
            while((c=bis.read())!= -1){
                bos.write(c);
                bos.flush();
            }
        }catch(Exception exception){
            exception.printStackTrace();
            throw new Exception("文件保存失败!");
        }finally{
            bos.close();
            bis.close();
        }
    }
    /**
     * PraseMimeMessage类测试
      */

    public static void main(String args[])throws Exception{
        String host = "POP3.163.com";//【POP3.163.com】
        String username ="yuxia2217";//【yuxia2217】
        String password ="*************";//【........】
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("pop3");
        store.connect(host,username, password);
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        Message message[]=folder.getMessages();
        System.out.println("Messages's length: "+message.length);
        PraseMimeMessage pmm = null;
        for(int i=0;i<message.length;i++){
            pmm = new PraseMimeMessage((MimeMessage)message[i]);
            System.out.println("Message "+i+" subject: "+pmm.getSubject());
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());
            System.out.println("Message "+i+" replysign: "+pmm.getReplySign());
            System.out.println("Message "+i+" hasRead: "+pmm.isNew());
            System.out.println("Message "+i+"  containAttachment: "+pmm.isContainAttach((Part)message[i]));
            System.out.println("Message "+i+" form: "+pmm.getFrom());
            System.out.println("Message "+i+" to: "+pmm.getMailAddress("to"));
            System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc"));
            System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc"));
            pmm.setDateFormat("yy年MM月dd日 HH:mm");
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate());
            System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId());
            pmm.getMailContent((Part)message[i]);
            System.out.println("Message "+i+" bodycontent: 
"+pmm.getBodyText());
            pmm.setAttachPath("c:\tmp\coffeecat1124");
            pmm.saveAttachMent((Part)message[i]);
        }
    }
}

27.Ping
//import java.net.*;

String host = %%1; //"128.0.0.1"
boolean %%2;
try {
    %%2 = InetAddress.getByName(host).isReachable(4000);// 超时应该在4钞以上
} catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

28.调用Web Service
/*
import org.apache.axis.client.*;
*/
/**
* 远程调用web service 2008.09.04
* 需要添加axis.jar,axis-ant.jar,axis-schema.jar,commons-discovery.jar包
* @author Rascal_hu      http://hi.baidu.com/rascal_hu
*/
public String getMessage(){
    String msg="";
    try{
        //设置远程地址
        String URL="http://192.168.0.168:3219/WebService/services/Hello";
        Service service=new Service();
        Call call=(Call)service.createCall();
        call.setTargetEndpointAddress(new java.net.URL(URL));
        //设置远程方法
        call.setOperationName("example");
        msg=(String)call.invoke(new Object[]{"Jesun"});//远程方法返回值为String
        //如果远程方法需要接受参数.则上面的写法为:(String)call.invoke(new Object[]{参数1,参数2,..});
        //如果远程方法不需要接受参数,则写为:(String)call.invoke(new Object[]{});
    }catch(Exception e){
        e.printStackTrace();
        System.out.println("远程调用webservice失败!");
    }
    return msg;
}
CallWebService callWeb=new CallWebService();
String msg=callWeb.getMessage();
System.out.println(msg);

29.HTTP代理服务器
/*
import java.net.*;
import java.io.*;
*/
HttpClient httpClient = new HttpClient();   
// 设置代理服务器的ip地址和端口   
//      httpClient.getHostConfiguration().setProxy("127.0.0.1", 8888);   
//      // 使用抢先认证   
//      httpClient.getParams().setAuthenticationPreemptive(true);   
GetMethod method = new GetMethod("http://www.javaeye.com/topic/154258");   
HostConfiguration config = httpClient.getHostConfiguration();   
config.setProxy("127.0.0.1", 8888);   
//      method.addRequestHeader("Content-type", "text/xml; charset=utf-8");   
try {   
    int statusCode = httpClient.executeMethod(method);   
    if (statusCode != HttpStatus.SC_OK) {   
        System.err.println("Method failed: " + method.getStatusLine());   
    }   
    String resultXml = method.getResponseBodyAsString();   
    System.out.println(resultXml);   
} catch (HttpException e) {   
    e.printStackTrace();   
} catch (IOException e) {   
    e.printStackTrace();   
}

30.创建启动线程
public void myFunc()
{
    %%1
}
Thread myThread=new Thread(new ThreadStart(myFunc));
myThread.Start();

31.线程挂起唤醒
myThread.Sleep(Infinite);
myThread.Suspend();

32.线程插入终止
myThread.Abort();
myThread.Join();

33.HTTP多线程下载
/*
import java.io.*;
import java.net.*;
*/
/**
* HTTP的多线程下载工具。
* 
* @author 赵学庆 www.java2000.net
*/1.public class HTTPDownloader extends Thread {
    // 要下载的页面1.  private String page;
    // 保存的路径1.  private String savePath;
    // 线程数1.  private int threadNumber = 2;
    // 来源地址1.  private String referer;
    // 最小的块尺寸。如果文件尺寸除以线程数小于这个,则会减少线程数。1.  private int MIN_BLOCK = 10 * 1024;
    public static void main(String[] args) throws Exception {
        HTTPDownloader d = new HTTPDownloader("http://www.xxxx.net/xxxx.rar", "d://xxxx.rar", 10);
        d.down();
    }
    public void run() {
        try {
            down();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
    * 下载操作
    * 
    * @throws Exception
    */1.  public void down() throws Exception {
        URL url = new URL(page); // 创建URL1.    URLConnection con = url.openConnection(); // 建立连接1.    int contentLen = con.getContentLength(); // 获得资源长度1.    if (contentLen / MIN_BLOCK + 1 < threadNumber) {
        threadNumber = contentLen / MIN_BLOCK + 1; // 调整下载线程数1.    }
        if (threadNumber > 10) {
            threadNumber = 10;
        }
        int begin = 0;
        int step = contentLen / threadNumber;
        int end = 0;
        for (int i = 0; i < threadNumber; i++) {
            end += step;
            if (end > contentLen) {
                end = contentLen;
            }
            new HTTPDownloaderThread(this, i, begin, end).start();
            begin = end;
        }
    }
    public HTTPDownloader() {
    }
    /**
    * 下载
    * 
    * @param page 被下载的页面
    * @param savePath 保存的路径
    */1.  public HTTPDownloader(String page, String savePath) {
        this(page, savePath, 10);
    }
    /**
    * 下载
    * 
    * @param page 被下载的页面
    * @param savePath 保存的路径
    * @param threadNumber 线程数
    */  public HTTPDownloader(String page, String savePath, int threadNumber) {
        this(page, page, savePath, 10);
    }
    /**
    * 下载
    * 
    * @param page 被下载的页面
    * @param savePath 保存的路径
    * @param threadNumber 线程数
    * @param referer 来源
    */  public HTTPDownloader(String page, String referer, String savePath, int threadNumber) {
        this.page = page;
        this.savePath = savePath;
        this.threadNumber = threadNumber;
        this.referer = referer;
    }
    public String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    public String getSavePath() {
        return savePath;
    }
    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }
    public int getThreadNumber() {
        return threadNumber;
    }
    public void setThreadNumber(int threadNumber) {
        this.threadNumber = threadNumber;
    }
    public String getReferer() {
        return referer;
    }
    public void setReferer(String referer) {
        this.referer = referer;
    }
}
/**
* 下载线程
* 
*/1.class HTTPDownloaderThread extends Thread {
    HTTPDownloader manager;
    int startPos;
    int endPos;
    int id;
    int curPos;
    int BUFFER_SIZE = 4096;
    int readByte = 0;
    HTTPDownloaderThread(HTTPDownloader manager, int id, int startPos, int endPos) {
        this.id = id;
        this.manager = manager;
        this.startPos = startPos;
        this.endPos = endPos;
    }
    public void run() {
        // System.out.println("线程" + id + "启动");1.    // 创建一个buff1.    BufferedInputStream bis = null;
        RandomAccessFile fos = null;
        // 缓冲区大小1.    byte[] buf = new byte[BUFFER_SIZE];
        URLConnection con = null;
        try {
            File file = new File(manager.getSavePath());
            // 创建RandomAccessFile1.      fos = new RandomAccessFile(file, "rw");
            // 从startPos开始1.      fos.seek(startPos);
            // 创建连接,这里会为每个线程都创建一个连接1.      URL url = new URL(manager.getPage());
            con = url.openConnection();
            con.setAllowUserInteraction(true);
            curPos = startPos;
            // 设置获取资源数据的范围,从startPos到endPos1.      con.setRequestProperty("Range", "bytes=" + startPos + "-" + endPos);
            // 盗链解决1.      con.setRequestProperty("referer", manager.getReferer() == null ? manager.getPage() : manager.getReferer());
            con.setRequestProperty("userAgent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
            // 下面一段向根据文件写入数据,curPos为当前写入的未知,这里会判断是否小于endPos,1.      // 如果超过endPos就代表该线程已经执行完毕1.      bis = new BufferedInputStream(con.getInputStream());
            while (curPos < endPos) {
                int len = bis.read(buf, 0, BUFFER_SIZE);
                if (len == -1) {
                    break;
                }
                fos.write(buf, 0, len);
                curPos = curPos + len;
                if (curPos > endPos) {
                    .          // 获取正确读取的字节数1.          readByte += len - (curPos - endPos) + 1;
                } else {
                    readByte += len;
                }
            }
            // System.out.println("线程" + id + "已经下载完毕:" + readByte);1.      bis.close();
            fos.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

34.MP3播放
//必须下载 jmf包
//import javax.media.bean.playerbean.MediaPlayer; //必须下载 jmf 媒体播放包 
MediaPlayer player;
player = new MediaPlayer(); 
setLayout(new FlowLayout()); 
try{ 
    player.setMediaLocation("file:/F:\音乐\mp3\黑白配.mp3");// <<file:/>>不能删除 音频文件路径 
} catch (Exception e) { 
    System.out.println("文件不存在"); 
}
player.start();
player.stop();

35.WAV播放
/*
import javax.sound.sampled.*;
import java.io.*;
*/
private AudioFormat format;
private byte[] samples;
private String filename;
try {
    // open the audio input stream
    AudioInputStream stream =AudioSystem.getAudioInputStream(new File(filename));
    format = stream.getFormat();
    // get the audio samples
    samples = getSamples(stream);
}
catch (UnsupportedAudioFileException ex) {
    ex.printStackTrace();
}
catch (IOException ex) {
    ex.printStackTrace();
}

private byte[] getSamples(AudioInputStream audioStream) {
    // get the number of bytes to read
    int length = (int)(audioStream.getFrameLength() * format.getFrameSize());

    // read the entire stream
    byte[] samples = new byte[length];
    DataInputStream is = new DataInputStream(audioStream);
    try {
        is.readFully(samples);
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }

    // return the samples
    return samples;
}

public void play(InputStream source) {

    // use a short, 100ms (1/10th sec) buffer for real-time
    // change to the sound stream
    int bufferSize = format.getFrameSize() *
        Math.round(format.getSampleRate() / 10);
    byte[] buffer = new byte[bufferSize];

    // create a line to play to
    SourceDataLine line;
    try {
        DataLine.Info info =
            new DataLine.Info(SourceDataLine.class, format);
        line = (SourceDataLine)AudioSystem.getLine(info);
        line.open(format, bufferSize);
    }
    catch (LineUnavailableException ex) {
        ex.printStackTrace();
        return;
    }

    // start the line
    line.start();

    // copy data to the line
    try {
        int numBytesRead = 0;
        while (numBytesRead != -1) {
            numBytesRead =
                source.read(buffer, 0, buffer.length);
            if (numBytesRead != -1) {
                line.write(buffer, 0, numBytesRead);
            }
        }
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }

    // wait until all data is played, then close the line
    line.drain();
    line.close();
}

throws Exception
    String filename=%%1;
    InputStream stream =new ByteArrayInputStream(sound.getSamples());
    // play the sound
    sound.play(stream);