http://java.sun.com/j2se/1.4/docs/guide/security/jsse/samples/index.html
有例子,去看看

解决方案 »

  1.   

    客户端的applet:import java.io.*;
    import java.net.*;
    import java.awt.*;public class webTalkClient extends java.applet.Applet
    {
    TalkClient kc=new TalkClient();
    public void init()
    {
    add(kc);
    kc.init();
    } public void stop()
    { kc.stop();  }
    }class TalkClient extends Panel implements Runnable
    {
    Thread kicker=null;
    TextField user=new TextField(20);
    TextField host=new TextField(20);
    TextArea log=new TextArea(8,40);
    TextField field=new TextField(40);
    Button connect=new Button(" Connect ");
    Button send=new Button(" Send ");
    Button bye=new Button(" bye ");
    Socket kkSocket=null;
    PrintStream os;
    DataInputStream is; public void init()
    {
    setLayout(new CardLayout());
    Panel p=new Panel();
    setFont(new Font("TimesRoman",Font.PLAIN,15));
    Panel labels=new Panel();
    Panel fields=new Panel();
    labels.setLayout(new GridLayout(0,1,10,20));
    fields.setLayout(new GridLayout(0,1,10,20));
            p.add(labels);
    p.add(fields);
    labels.add(new Label(""));
    fields.add(new Label(""));
    labels.add(new Label("User Name"));
    fields.add(user);
    labels.add(new Label("Host Name"));
    fields.add(host);
    labels.add(new Label(""));
    fields.add(connect);
    add("login",p); Panel p1=new Panel();
    p1.setLayout(new BorderLayout());
    Panel p2=new Panel();
    log.setEditable(false);
    p2.add(log);
    p1.add("North",p2);
    Panel p3=new Panel();
    p3.setLayout(new BorderLayout());
    Panel p4=new Panel();
    p4.add(send);
    p4.add(new Label(" "));
    p4.add(bye);
    p3.add("North",field);
    p3.add("Center",p4);
    p1.add("Center",p3);
    add("send",p1);
    } public void stop()
    {
    if(kicker!=null) kicker.stop();
    if(kkSocket!=null)
    {
    sendData("Bye");
    try
                { Thread.sleep(100);    }
    catch(InterruptedException e){}
    closeSocket();
    }
    } public void run()
    {
    String fromServer=null;
    while((fromServer=getData())!=null)
    log.appendText(fromServer+"\n");
    kicker=null;
    closeSocket();
    ((CardLayout)getLayout()).show(this,"login");
    }   /*初始化连接服务器*/
    boolean connectHost(String hostName)
    {
    try
    {
    kkSocket=new Socket(hostName,4700);
    os=new PrintStream(kkSocket.getOutputStream());
    is=new DataInputStream(kkSocket.getInputStream());
    }
    catch(UnknownHostException e)
    {
    log.setText("Trying to connect to unknown host:"+e);
    System.out.println("Trying to connect to unknown host:"+e);
    return false;
    }
    catch(Exception e)
    {
    log.setText("Exception:"+e);
    System.out.println("Exception:"+e);
    return false;
    }
    return true;
    }    /*从服务器取得数据*/
    String getData()
    {
    String fromServer;
    try
    {
     fromServer=is.readLine();
    }
    catch(Exception e)
    {
    log.setText("Exception :"+e);
    return null;
    }
    return fromServer;
    }    /*向服务器发送数据*/
    boolean sendData(String toServer)
    {
    try
    {
    os.println(toServer);
    os.flush();        
    }
    catch(Exception e)
    {
    log.setText("Exception:"+e);
    return false;      
    }
    return true;
    } void closeSocket()
    {
    try
    {
    os.close();
    is.close();
    kkSocket.close();
    kkSocket=null;
    }
    catch(Exception e)
    { log.setText("Exception :"+e);   }
    } public boolean action(Event e,Object arg)
    {
    switch(e.id)
    {
    case Event.ACTION_EVENT:
    if(e.target==connect)
    {
    if(connectHost(host.getText()))
    {
    sendData(user.getText());
    kicker=new Thread(this);
    kicker.start();
    log.setText(" ");
    field.setText(" ");
    ((CardLayout)getLayout()).show(this,"send");
    }
    return true;
    }
    else if(e.target==send)
    {
    if(!sendData(" "+field.getText()))
    {
    kicker.stop();
    kicker=null;
    closeSocket();
    ((CardLayout)getLayout()).show(this,"login");
    }
    return true;
    }
    else if(e.target==bye)
    {
    kicker.stop();
    kicker=null;
    sendData("Bye");
    closeSocket();
    ((CardLayout)getLayout()).show(this,"login");
    return true;
    }
    break;
    }
    return false;
    }
    }服务器端的applet://webTalkServer.java
    import java.io.*;
    import java.net.*;
    import java.awt.*;class webTalkServer extends java.applet.Applet implements Runnable
    {
    Thread kicker=null;
        /*线程组用来管理多个用户的情况*/
    ThreadGroup dealGroup;  //文本域用于显示每个用户所发送的信息
    TextArea log=new TextArea(4,30);  //列表框列出所有的用户
    List list=new List();
    int number=0; public void init()
    {
    setLayout(new BorderLayout());
    Panel p1=new Panel();
    log.setEditable(false);
    p1.add("log",log);
    add("North",p1);
    Panel p2=new Panel();
    p2.add("label",new Label("User List"));
    p2.add("list",list);
    add("Center",p2);
    } public void start()
    {
    dealGroup=new ThreadGroup("DealThreads");
    kicker=new Thread(this);
    kicker.start();
    } public void stop()
    {
    kicker.stop();
    kicker=null;
    dealGroup.stop();
    } public void run()
    {
    ServerSocket serverSocket=null;
    Socket clientSocket;
    try
    { serverSocket=new ServerSocket(4700); }
    catch(IOException e){
    System.out.println("Could not listen on port "+4700+","+e);
    return;}
    try{
    do{
    clientSocket=serverSocket.accept();
    (new DealThread(dealGroup,this,clientSocket,++number)).start();
    }while(true);}
    catch(IOException e){
    System.out.println("Accept failed:"+4700+","+e);
    return;}
    } public synchronized void appendTipsText(String message)
    { log.appendText(message);   } public synchronized void addUser(String username)
    {   list.addItem(username);     }    /*在用户退出时,从列表况中删除该用户*/
    public synchronized void delUser(String username)
    {
    int count,i;
    count=list.countItems();
    for(i=0;i<count;i++)
    if(username.equals(list.getItem(i)))
    {   list.delItem(i);   break;  }
    } public static void main(String[] args)
    {
    webTalkServer kkserver=new webTalkServer();
    kkserver.init();
    kkserver.start();
    SFrame f=new SFrame("webTalkServer",kkserver);
    f.setResizable(false);
    f.setBackground(Color.lightGray);
    f.add("Center",kkserver);
    f.resize(300,200);
    f.show();
    }
    }class DealThread extends Thread
    {
    webTalkServer kkserver;
    Socket clientSocket;
    BufferedReader is;
    PrintWriter os;
    String userName;
    int number; public DealThread(ThreadGroup dealGroup,
                       webTalkServer kkserver,Socket clientSocket,int number)
    {
    super(dealGroup,"DealGroup");
    this.kkserver=kkserver;
    this.clientSocket=clientSocket;
    this.number=number;
    } public void run()
    {
    try{
                /*创建接收来自Client端信息的输入流*/
    is=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                /*创建向Client端发送数据的输出流*/
    os=new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
    String fromClient=null,toClient=null;
    boolean first=true,bye=false;
    userName=getData();
                /*该线程启动后,调用主类的方法加入该Client端成员*/
    kkserver.addUser("["+userName+"]-"+number);
    do{
    int count,i;
    if(first)   toClient="Use["+userName+"]join";
                 /*该Client端用户退出,则删除之,并向其它成员发送信息*/
    else if(fromClient.equals("Bye")){
    bye=true;
    kkserver.delUser("["+userName+"]-"+number);
    toClient="User["+userName+"]say bye";}
    else toClient="From["+userName+"]:"+fromClient;
    kkserver.appendTipsText(toClient+"\n");
                    /*调用Thread类的方法activeCount()检查当前活动线程数*/
    count=activeCount();
    Thread threads[]=new Thread[count];
    /*调用Thread类的enumerate(Thread T[])方法将线程组dealGroup     中所有活动线程的引用填入线程数组threads[]中*/
    enumerate(threads);
    for(i=0;i<count;i++)
    if(threads[i]!=this){
                     /*非本线程的每一个线程组成员向该线程发送信息*/
    ((DealThread)(threads[i])).sendData(toClient);
    if(first)
    sendData("User["+((DealThread)(threads[i])).getUserName()+
                                     "]say hello to you");}
    first=false;
    if(bye) break;
    }while((fromClient=getData())!=null);
    os.close();
    is.close();
    clientSocket.close();
    }
    catch(IOException e)
    { e.printStackTrace();   }
    } synchronized String getUserName()
    { return userName;  } String getData()
    {
    String fromClient;
    try
    {  fromClient=is.readLine();  }
    catch(Exception e) {
    System.out.println("Exception :"+e);
    return null;   }
    return fromClient;
    } synchronized boolean sendData(String toClient)
    {
    try{
    os.println(toClient);
    os.flush();   }
    catch(Exception e) {
    System.out.println("Exception :"+e);
    return false;  }
    return true;
    }
    }class SFrame extends Frame
    {
    webTalkServer kkserver;
    public SFrame(String Name,webTalkServer kkserver)
    {
    super(Name);
    this.kkserver=kkserver;
    } public boolean handleEvent(Event e)
    {
    switch(e.id){
    case Event.WINDOW_DESTROY:
    kkserver.stop();
    kkserver.destroy();
    System.exit(0);}
    return super.handleEvent(e);
    }
    }自己加上两个.htm试试
      

  2.   

    oh,it"s so easy!!楼上的程序是不是还有点过场亚? :)