菜鸟盼望雷锋叔叔和雷锋阿姨的出现,谢谢了 http://java.sun.com/j2se/1.4/docs/guide/security/jsse/samples/index.html有例子,去看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 客户端的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.javaimport 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试试 oh,it"s so easy!!楼上的程序是不是还有点过场亚? :) java linux下执行 shell问题 求3gp格式文件的切割代码或处理开发包 如何用java设计简单的分形?比如科赫雪花. 一道简单的考试题,有点疑问 誰用過JFreereport制作報表? java入门,新手上路,请大家多多指教!(百分求助) eclipse 下载不成功 为什么编译通不过 什么叫本地编译器? 这样不是挺浪费空间吗? 如何比较两个char型数组是否相等 谁都可以回答的问题(只要你会java)!!!!!!!
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试试