下面要做的是将文本从闲聊服务器传输到显示屏上。作这个工作
最好的办法是应用thread。thread随套接口的打开和关闭而打开
和关闭。thread能够同时读取相当大量的数据,在从套接口读取
数据和更新textarea方面效率都很高。
chat.java:
import java.applet.applet;
import java.awt.*;
import java.net.socket;
import java.io.inputstream;
public class chat extends applet implements runnable {
textarea ta;
textfield tf;
socket s;
thread t;
public void init() {
ta = new textarea("",20,80);
ta.seteditable(false);
add(ta);
tf = new textfield(80);
add(tf);
}
public void start() {
try {
string host = getparameter("host");
int port = integer.parseint(getparameter("port"));
s = new socket(host,port);
t = new thread(this);
t.start();
} catch(exception e) {
ta.appendtext("applet error: "+e+"/n");
}
}
public void stop() {
try {
t.stop();
s.close();
} catch(exception e) {
ta.appendtext("applet error: "+e+"/n");
}
}
public void run() {
try {
inputstream is = s.getinputstream();
byte[] buf = new byte[200];
while(true) {
int avail = is.available();
if(avail<1) avail=1;
if(avail>buf.length) avail=buf.length;
int bytes_read = is.read(buf,0,avail);
ta.appendtext(new string(buf, 0, 0, bytes_read));
}
} catch(exception e) {
system.err.print(e);
}
}
public boolean handleevent(event e) {
if(e.id==event.action_event && e.target==tf) {
ta.appendtext(tf.gettext()+"/n");
tf.settext("");
return true;
}
return false;
}
}
闽公网安备 35060202000074号